微服务架构 ------ Day01 微服务架构优缺点
1. 微服务架构的优点
- 庞大的单体程序 -> 一套微型程序。 每一个服务有明确的边界(服务之间的消息通讯机制) ,每一个服务都能单独的开发和维护,并且更好理解
- 每一个服务都能由一个团队来开发,当然开发者对技术的选型可以自由选择,即使某一个服务的技术过时或者有缺陷,都可以在很小的成本下进行技术升级,减少系统改造的成本
- 每一个服务独立部署,功能开发完成之后可以直接进行部署。
- 每一个服务可以根据当前服务的性质,选择适合的硬件进行部署,比如 对于计算能力强的 但是存储要求不高的模块,可以部署在cpu能力强但是硬件存储少的服务器,对于需要做存储而不需要太多运算的情况,可能选择对应的硬件模式
2.微服务架构的缺点
- 多个服务的产生也会使系统的架构变得复杂,每个服务之间必须实现服务间的通讯协议
- 对于服务间请求慢,或者请求失败的情况,各个服务需要实现对应的错误处理
- 分区数据库架构,服务之间的事物处理,不同服务可能采用的不同的数据库,并且有些nosql数据库根本不支持事物,所以开发人员不得不采用最终一致性来保证数据
- 服务代码的测试,一个服务的测试需要启动跟该服务关联的所以服务,依赖的服务越多,服务的测试就越困难
- 服务的变更,服务之间的依赖导致某一个被依赖的服务如果重启的话,我们所测试的服务也必须重启,并且服务之间的依赖顺序也限制了我们服务的启动顺序
- 服务器的布置,随着服务的增加,服务器的数量呈倍数增长。
- 需要实现服务的发现机制,使得服务能发现需要与之通讯的其他任何服务的位置
TIP: CAP定理
一个分布式系统最多满足,一致性,可用性,分区容错性 三项中的两项 (是指在一个服务中)
- 一致性:是指更新操作成功并返回客户端后,所有节点在同一时刻数据是一致的 (最终结果是一致的)
- 可用性:服务一直可用,并且是正常响应时间 (正常响应的时间间隙,也就是部署的多个同一服务之间的数据库数据在数据同步的这段时间 数据库中的数据可能是不一致的)
- 分区容错性:是指在分布式服务某一个节点故障之后,某个节点仍能对外提供满足 一致性,可用性的服务
那么如何取舍:
- 在大型网络应用,一般选择AP 舍弃 C 但是会用最终一致性来弥补 C
- 在关于钱财方面(银行案例) C是底线 保证CP 舍弃A, 系统可以通过阻止数据的插入来确保CP
3.微服务如何应对高并发
- 垂直扩展
- 增加硬件设备
- 使用缓存替代IO,使用异步来替代同步 等
不管怎么说,对于单体硬件的扩展始终是有极限的,所以垂直扩展的方式并不适用于大型的互联网项目
- 水平扩展
- 增加服务器数量,以请求分发的模式减少服务的压力
TIPS: 数据库分库分表分区 可以根据字段的 某一个位置选择使用 水平扩展出来的某一个库 某一个字段与库1-1对应,再选择一个字段与库中的某一个表 1-1对应 ,再选择一个字段与 表中的分区 1-1对应
微服务架构 ------ Day01 微服务架构优缺点的更多相关文章
- SpringCloud学习笔记(二):微服务概述、微服务和微服务架构、微服务优缺点、微服务技术栈有哪些、SpringCloud是什么
从技术维度理解: 微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底 地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事, 从技术角度看就是一种小而独立的处理过程,类 ...
- (1)java Spring Cloud+Spring boot+mybatis企业快速开发架构之微服务是什么?它的优缺点有哪些?
"微服务"一词来源于 Martin Fowler 的<Microservices>一文.微服务是一种架构风格,即将单体应用划分为小型的服务单元,微服务之间使用 HT ...
- 【CHRIS RICHARDSON 微服务系列】微服务架构中的进程间通信-3
编者的话 |本文来自 Nginx 官方博客,是微服务系列文章的第三篇,在第一篇文章中介绍了微服务架构模式,与单体模式进行了比较,并且讨论了使用微服务架构的优缺点.第二篇描述了采用微服务架构的应用客户端 ...
- 软件架构的演进,了解单体架构,垂直架构,SOA架构和微服务架构的变化历程
软件架构演进 软件架构的发展经历了从单体结构.垂直架构.SOA架构到微服务架构的过程,博客里写到了这四种架它们的特点以及优缺点分析,个人学习之用,仅供参考! 1.1.1 单体架构 特点: 1 ...
- Chris Richardson微服务翻译:微服务架构中的服务发现
Chris Richardson 微服务系列翻译全7篇链接: 微服务介绍 构建微服务之使用API网关 构建微服务之微服务架构的进程通讯 微服务架构中的服务发现(本文) 微服务之事件驱动的数据管理 微服 ...
- 开源微信管家平台——JeeWx 捷微4.0 微服务版本发布,全新架构,全新UI,提供强大的图文编辑器
JeeWx捷微4.0 微服务版本发布^_^ 换代产品(全新架构,全新UI,提供强大的图文编辑器) JEEWX 从4.0版本开始,技术架构全新换代,采用微服务架构,插件式开发,每个业务模块都是独立的 ...
- [转]系统架构演变--集中式架构-垂直拆分-分布式服务-SOA(服务治理)-微服务
一.系统架构演变 1.1. 集中式架构 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本.此时,用于简化增删改查工作量的数据访问框架(ORM)是影响项目开发的关键. 存在的 ...
- 【转】「Chris Richardson 微服务系列」微服务架构的优势与不足
Posted on 2016年5月4日 编者的话|本文来自 Nginx 官方博客,是微服务系列文章的第一篇,主要探讨了传统的单体式应用的不足,以及微服务架构的优势与挑战. 作者介绍:Chris Ric ...
- Java生鲜电商平台-SpringCloud微服务开发中的数据架构设计实战精讲
Java生鲜电商平台-SpringCloud微服务开发中的数据架构设计实战精讲 Java生鲜电商平台: 微服务是当前非常流行的技术框架,通过服务的小型化.原子化以及分布式架构的弹性伸缩和高可用性, ...
随机推荐
- python2.x和python3.x版本共存时选择启动的版本
在windows环境下装好python2.7和python3.6之后,我之前一直是用了很笨的办法去区分版本 那就是把各个版本python安装目录下的python.exe分别改为python2.exe和 ...
- 搭建大数据开发环境-Hadoop篇
前期准备 操作系统 hadoop目前对linux操作系统支持是最好的,可以部署2000个节点的服务器集群:在hadoop2.2以后,开始支持windows操作系统,但是兼容性没有linux好.因此,建 ...
- 【THE LAST TIME】彻底吃透 JavaScript 执行机制
前言 The last time, I have learned [THE LAST TIME]一直是我想写的一个系列,旨在厚积薄发,重温前端. 也是给自己的查缺补漏和技术分享. 欢迎大家多多评论指点 ...
- 使用Espresso测试记录
准备工作 建立测试项目 添加测试依赖 编写Espresso测试 运行测试并检查测试结果 建立测试项目 使用Android Studio建立测试项目,Activity模版使用 LoginActivity ...
- jenkins+svn+Ant+tomcat+非maven项目构建
首先,输入项目名称,创建一个自由风格的项目; 然后,配置旧项目的策略参数,目的是防止构建项目太多,占用资源. 下一步,jdk版本选择: 下一步,关联svn项目. 下一步:配置ant 看不清,再来一张. ...
- Python简单的登录注册代码
#-*- coding: utf-8 -*- import hashlib # 定义数据库(声明字典) #注册登录的简单hash处理 db={} def get_md5(password): md5= ...
- ArchLinux安(重)装指南
说实话,我其实是不想要出这篇博客的.在我这一个月安装Arch的过程中,让我感触比较深的一点是: 没有谁比这个系统的官方更懂它. 尤其是这种比较复杂的系统,更是如此. 这几天,我经历了一次重装,系统坏了 ...
- 3DEarth PPT :一款专为GIS系统研发的三维汇报演示系统
3DEarth PPT(三维地球汇报演示系统)又称 3DGis PPT,是专为GIS系统研发的三维汇报演示系统.对有3DGis系统的客户它可以作为一个组件(dll)嵌入原系统,对没有3DGis系统的客 ...
- php EOF(heredoc)使用
PHP EOF(heredoc)是一种在命令行shell(如sh.csh.ksh.bash.PowerShell和zsh)和程序语言(像Perl.PHP.Python和Ruby)里定义一个字符串的方法 ...
- 教老婆学Linux运维(二)Linux常用命令指南【上】
目录 教老婆学Linux(二)Linux常用命令指南[上] 一.概述 二.常用命令 教老婆学Linux(二)Linux常用命令指南[上] 作者:姚毛毛的博客 tips:文章太长,分两篇发出,本篇发前三 ...