微服务架构的演变:

微服务是一种松散耦合的,每个服务之间高度自治并且使用轻量级协议进行通信的可持续部署的分布式架构体系,这句话包含了微服务的特点,微服务架构和其他架构有什么区别 ? 以下是一些常见的软件架构:

一.单体应用架构:

单体应用架构是最简单的软甲架构,常用于传统的应用软件开发以及传统Web应用。传统Web应用,一般将所有功能模块都打包成(.jar/.war),在WEB应用服务器(Tomcat、Jboss、Jetty、webShare)中部署、运行。随着业务复杂度增加、技术团队规模扩大,在一个单体应用架构维护代码,会降低开发效率,即便处理一个小小的需求,也需要将所有机器上的的应用全都部署一遍,增加运维的复杂度。

弊端:被很多用户使用以后,就会产生一些严重的问题,CPU、硬盘有一个性能上限,假如一台只能接受5W同时访问的服务器,那假如有一年用户量暴涨到500W来访问就会出现:

1、服务器过载 CPU、内存、打满(服务器响应缓慢、宕机)

2、用户通过HTTP请求,每一次请求会发送一定数量的数据包、带宽被用尽-访问转圈圈,404无法访问

解决方法:

1.垂直扩容

可以通过更新硬件,提升带宽

2.水平扩容

前面讲到了用户出现了500W并发访问使用垂直扩容的方法可以解决,可以试想一下这样一个场景。假如经过几年的累加,用户量达到了5000W呢

解决方法:

集群架构模式

那么就可以多开几台服务器来解决服务器的压力,但是会出现一个问题就是每个服务器的属名不一致(IP地址不一致)。用户明明在注册界面注册了但是在登录的时候查不到他注册的信息登录不了,问题是怎么导致的呢,就是不同的服务器不同的端口接收的请求不同,导致数据不同步,该怎么解决请看下面的图:

下面不同的端口号代表一个个服务器  用户去访问只访问qq.com10.123.243.220这个端口。通过负载均衡将所有请求,均衡分配给每一台服务器。(然后老板就会说做的做的好,加薪)

二.SOA架构

当某一天使用单体架构发现很难推进需求的开发、以及日积月累的技术债时,很多企业会开始做单体服务的拆分,拆分的方式一般有水平拆分和垂直拆分。垂直拆分是把一个应用拆成松耦合的多个独立的应用,让应用可以独立部署,有独立的团队进行维护;水平拆分是把一些通用的,会被很多上层服务调用的模块独立拆分出去,形成一个共享的基础服务,这样拆分可以对一些性能瓶颈的应用进行单独的优化和运维管理,也在一定程度上防止了垂直拆分的重复造轮子。

SOA 也叫面向服务的架构,从单体服务到 SOA 的演进,需要结合水平拆分及垂直拆分。SOA 强调用统一的协议进行服务间的通信,服务间运行在彼此独立的硬件平台但是需通过统一的协议接口相互协作,也即将应用系统服务化。

举个易懂的例子:

单体服务如果相当于一个快餐店,所有的服务员职责都是一样的,又要负责收银结算,又要负责做汉堡,又要负责端盘子,又要负责打扫,服务员之间不需要有交流,用户来了后,服务员从前到后负责到底(一条龙服务)。SOA 相当于让服务员有职责分工,收银员负责收银,厨师负责做汉堡,保洁阿姨负责打扫等,所有服务员需要用同一种语言交流,方便工作协调(分工合作)。

再回头去看最上面的图片,你会发现用户管理、订单管理、支付管理都是一起执行的,要崩溃就一起崩溃,要运行就一起运行。而且在公司项目都会分开来做,一旦报错,责任都不好追究。每个人就互甩锅,做用户组的说没有错,做支付的也说没有错。老板啪的一声全部留下来加班,但是如果将他们拆分就能了,哪个组不通过就留下来加班。同时在几年后的今天用户量达到了5个亿,那么该怎么办呢。那有人就会说了再在原有的服务器上扩充个十倍不就好了,一台好的服务器市场价是200W 那么原有10台服务器的基础上扩充十倍就是两个亿,老板脸都可能青了。请那么多人来就是败公司的?这时候老板就会想我不如花点钱请专家来设计一下。节约一下成本  如图所示:

这时候专家就总体分析了一遍,把常用的和不常用的划分开来,通过验证发现使用支付的占了%80,其他的只占了20%。90%业务处于数据读取查询,10%写入。所以给18台服务器专门做支付,其他的服务器做其他。这样子既节约了成本,还划分了区域。仔细的算笔帐,会发现原来需要100台服务器,现在22台服务器就做到了。一下省了一亿多的米,这是一个普通人几辈子的赚不到的。
那么恭喜这位专家,盆满钵满的唱着征服回家了(被自己的技术魅力征服了)。

微服务和SOA

微服务也是一种服务化,不过和SOA架构的服务化概念还是有区别的,可用以下关键字理解:

松耦合

每个微服务内部都可以使用DDD(领域驱动设计)的思想进行设计领域模型。服务器尽量减少服务器的调用,多使用消息的方式让领域时间进行解耦

轻量级协议

Dubbo是SOA开源标准实现之一,类似还有像RPC、Thrift等,微服务更倾向于Restful风格的API。轻量级协议很好的支持跨语言开发的服务,所有的语言都有一个共同点就是支持Http协议通信。

高度自治和持续集成

从底层的角度来说,SOA更加倾向于服务器和虚拟机的部署。每个应用部署在不同的机器上,一般持续集成工作更多的是运维团队写一些Shell脚本以及提供基于共同协议的开发部署页面(比如Dubbo管理页面)。微服务可以很好的和容器技术结合,容器技术比微服务出的晚,但是容器技术的出现让微服务实施更加方便。目前Decker已经成为很多微服务实践的基础。因为容器的特点,所以一台机器上可以部署几十个甚至上百个不同的微服务,如果某个微服务的流量压力比其他微服务大,可以在在不增加机器的基础上。在一台机器上多分配该微服务的容器实例。同时,因为 Docker 的容器编排社区日渐成熟,类似 Mesos、Kubernetes 及 Docker 官方提供的 Swarm 都可以作为持续集成部署的技术选择。

其实从架构的演进的角度来看,整体的演进都是朝着越来越轻量级、越来越灵活的应用方向发展,甚至到近两年日渐成熟起来的 Serverless(无服务)架构。从单体服务到分层的服务,再到面向服务、再到微服务甚至无服务,对于架构的挑战是越来越大

微服务和SOA都属于典型的分布式架构,只不过微服务部署的粒度更细,服务扩展更灵活。

微服务中的分布式

微服务的分层不仅仅是容器应用层面的分布式,其为了高度自治,底层的存储体系也应该相互独立。并不是所有的微服务都需要持久的存储服务。就像一个“手机验证码”微服务可能底层存储就用到一个非关系型数据库Redis;一个”营销活动搭建页面“微服务可能就底层存储就使用mongoDB。

三、分布式微服务架构

那么分布式到底是什么样的呢,可以看到服务器变成了服务、如图所示:

相比前面的架构而言

微服务是真正的分布式的、去中心化的。把所有的“思考”逻辑包括路由、消息解析等放在服务内部,去掉一个大一统的 ESB,服务间轻通信,是比SOA更彻底的拆分。
分布式微服务架构强调的重点是业务系统需要彻底的组件化和服务化,原有的单个业务系统会拆分为多个可以独立开发,设计,运行和运维数据的小应用,这些小应用之间通过服务完成交互和集成。

可以分为六个组件

(1)业务接入层:

(请求的分发):服务间路由和调度网关

(2)业务服务层:

各个功能模块服务 比如:支付,用户,订单

(3)服务注册中心:

提供服务的注册和发现以及编排和管理的功能,维护一个可用分的服务列表,当你在服务层上线了一个服务后必须要先在服务注册中心注册一下 和我们签到是一个意思 如下:

服务注册中心自带了一个”心跳机制“ 

心跳机制,每隔30秒会对每个服务发送一个非常小的请求,探测其他的服务还能不能被继续使用,一旦发现不可用,就会从可用列表移除掉,就不会被访问了,当服务恢复,Eureke下次心跳机制就会重新上线这个服务

 (4)RPC:

(远程工程的调用):每个独立的服务项目之间的调用

(5)配置中心:

将配置的参数统一管理的场所

(6)消息中间介:

记录用户发起的请求,各个服务可以通过定时任务或者自由访问消息中间介中的请求。

把原来的同步响应模式变成了异步响应模式。提升用户的响应时间,隐藏实现细节。

1.服务注册中心(Eurreck)(CAP理论 重点

帮助我们管理所有业务服务,维护一个可用的服务列表。

 为什么维护列表需要用到CAP理论呢?

而也因为分布式微服务架构 是一个真正的分布式架构项目里的功能模块都是独立开来的包括数据也是独立的,这就会造成数据不同步。

假如我用户管理修改了年龄但由于我其他的功能模块是独立的数据所以就不同步这就是一个很严重的问题,那么就得使用CAP理论来解决这个严重的问题了

(1)C 数据一致性:

分为强数据一致性和最终数据一致性,强数据一致性就是当你在某个服务中修改了数据 那么其他服务就必须将数据同步(数据同步时会造成短暂的不可访问状态),最终一致性 字面意思 就是最终提交的数据我要他是数据同步
不管你前面改了啥 反正我最后提交的时候要数据同步提交

(2)A 可用性:

提供业务访问的可用时间,就是你服务是不是可用一直开着可用一直访问
一般都是999 99999 这样子 一个礼拜停那么一两个小时或者一个月停那么一两个小时 可以率99%,争取做到无限接近百分百

(3)P 分区容错率(必须满足)

可以容忍某个服务不可用 但是必须不能影响整体服务器的运行

可以看出来 可用性和数据一致性 是互斥的(

分布式微服务架构及演变过程相关推荐

  1. 分布式微服务开发_想要精通分布式微服务架构?你得先学会设计、原理与实战...

    前言 第1章分布式微服务架构设计原理 第2章彻底解决分布式系统一致性的问题 第3章服务化系统容量评估和性能保障 第4章大数据日志系统的构建 第5章基于调用链的服务治理系统的设计... 第6章Java服 ...

  2. 什么是分布式微服务架构?-开课吧

    分布式微服务架构是一项成熟的技术,但仍在不断改进和进步.如果你想跟上它的步伐,初学者应该了解一些基本的相关知识. 比如: 1.当所有服务都是较小单元的部署结构时,一个要求需要调动更多的服务资源.如何获 ...

  3. 【九】分布式微服务架构体系详解——共识问题

    前言 分布式架构体系中,一致性和共识是分不开的概念,一致性也是我们解决很多分布式问题的关键.比如通过一致性模型可以实现数据集群的数据复制:通过基于阻塞的2PC协议可以实现分布式的原子性提交,保证事务数 ...

  4. 【我的新书】分布式微服务架构:原理与实战

    开心一笑 一次批小学语文卷,要求用"有--有--还有--"造句.一学生是这样写的:昨天去奶奶家,奶奶给我拿个鸡腿,我都吃完了问奶奶还有吗,奶奶答:"有,有,还有!&quo ...

  5. 从单体架构到分布式微服务架构的思考

    一.单体架构 1.什么是单体架构? 单体架构也可叫单体系统或单体应用,是一种把系统所有的功能模块耦合在一个应用的架构方式. 2.单体架构的优缺点有哪些? (1)优点 部署简单: 技术单一: 用人成本相 ...

  6. 分布式微服务架构体系详解

    课程介绍 微服务架构的技术体系.社区目前已经越来越成熟.在最初系统架构的搭建,或者当现有架构已到达瓶颈需要进行架构演进时,很多架构师.运维工程师会考虑是否需要搭建微服务架构体系.虽然很多文章都说微服务 ...

  7. 分布式微服务架构的技术体系

    微服务架构的演变 微服务是一种服务间松耦合的.每个服务之间高度自治并且使用轻量级协议进行通信的可持续集成部署的分布式架构体系.这一句包含了微服务的特点,微服务架构和其他架构有什么区别?以下对比一些常见 ...

  8. 基于若依开发的 Java EE 分布式微服务架构平台

    Admin Cloud 是一套企业级的多租户权限管理开发平台,基于 Admin Plus.iCRUD 和 若依.提供单体版和微服务版双版本.单体版(基于 Spring Boot) 和 微服务版(基于  ...

  9. SpringCloud 分布式微服务架构

    SpringCloud 分布式架构 前言 SpringCloud微服务 单体架构和微服务分布式架构 单体架构分析 微服务分布式架构分析 服务拆分和远程调用 服务拆分 案例需求准备 远程调用初步 Eur ...

  10. php分布式微服务开发_分布式微服务架构

    学习.跳槽涨薪?请关注 随着业务的不断发展, 用户体量的快速扩张. 从单体/垂直架构转移到分布式/微服务架构是自然而然的选择. 01 分布式理论 分布式理论是分布式系统的基础, 在任何情况下分布式系统 ...

最新文章

  1. java中的@Override是否需要
  2. [译] Security Token 生态 — 项目指南
  3. SEO系列二:何为用户体验?如何做好用户体验?
  4. sql编辑器_SQL的弱点(3):缺少静态类型检查
  5. opencv 直线检测笔记
  6. python dict()函数(用于创建一个字典)
  7. mq3.8.9版本有什么不同_Python3.9版本新特性:字典合并操作的详细解读
  8. 真狠!10000mAh超大电池手机发布,真的神机...
  9. java ibm notes_使用Java API从Lotus Notes NSF文件中提取电子邮件
  10. linux 查看策略路由,Linux下的策略路由。
  11. 钉钉机器人+Mac定时Launchctl
  12. 字节跳动智力题-推理题
  13. linux rs,Linux中的RS, ORS, FS, OFS
  14. 抖音小店另类起店方法
  15. 治精神疾病不能光靠吃药,还要学会自救
  16. 世界上有哪几大杀毒软件??
  17. 钦州学院计算机好吗,罗雁(数学与计算机科学系)老师 - 钦州学院 - 院校大全
  18. 计算机字符格式化集体备课教案,集体备课教案范文
  19. LeetCode每日一题:927. 三等分 (困难) 数组 数学
  20. 平台如何限制ip流量_微信视频号如何打造个人IP?三步教你成为流量IP达人

热门文章

  1. 天线工程手册_天线的原理是什么!?它到底是怎么接收信号的?
  2. 纸壳cms php,纸壳CMS 3.4 发布,电商功能增强
  3. vlfeat python
  4. 演化博弈论----gyy参考总结
  5. 面向能源互联网的多端口DC/DC能源路由器控制策略研究
  6. es 修改拼音分词器源码实现汉字/拼音/简拼混合搜索时同音字不匹配
  7. access阿里云 mysql_如何使用access数据库
  8. 图解详说pads2007安装全过程(经过验证)
  9. matlab课后习题,Matlab 课后习题集
  10. 大学数学学习参考书点评