从单体架构到微服务的架构演变过程

一、概述

每个技术的产生没有更好更坏之分,只是适用于不同的场景罢了。

二、单体架构(单一应用架构)

2.1、单体架构概念

将所有的业务场景的表示层,业务逻辑层和数据访问层打包放在一个工程中,最终经过编译打包,部署在一台服务器上。例如:典型的J2EE工程,把jsp,业务逻辑层的service,controller和数据访问层的dao,打包成wa包,部署在Tomcat或者Jetty或者其他容器上运行。

问题:数据库和应用程序部署到不同的服务器是单体架构吗?

单体架构关心的是否是整个应用部署同一个包,如果是则为单体架构,否则就不是。

2.2、单体架构应用场景及特点

业务场景简单,功能不复杂,研发人员较少。

公司处于创业初期:为了生存,需要的是快速开发出功能,然后到市场上试错。

性能要求及其苛刻:一些对性能要求比较高的系统,例如股票软件。

需求比较稳定的系统也不适合做成微服务,例如:公司内部OA,考勤系统等。

比如简单的网上超市,网站 页面包括 用户注册、登录功能、商品展示、下单。管理后台包括用户管理、商品管理、订单管理。需要快速开发出功能,发布到市场上,这种就直接使用单体架构即可。

传统架构其实就是SSH或者SSM,属于单点应用,把整个业务模块都在一个项目进行开发,分为MVC架构,会拆分成controller,service,dao层。

部署的时候首先所有功能集中在一个项目中打war包部署,通过集群(session共享集群)来提高服务器的性能。war包,图片服务器整合到war包,放到同一台服务器。

2.3、单体架构的优缺点 

优点:

部署简单 :由于是完整的结构体,可以直接部署在一份服务器上即可;

技术单一 :项目不需要复杂的技术栈,往往一套熟悉的技术栈就可以完成开发,前期开发的成本低,周期短,小型企业首选;

用人成本低 :单个程序员可以完成业务接口到数据库的整个流程。

缺点:

业务越来越复杂,单体架构扩展性不足,业务扩展带来的代价越来越大;

用户越来越多,程序承受的并发越来越高,单体应用的并发能力有限;

单体应用的业务都在同一个程序中,增删改业务修改,也会影响其他代码,给测试增加了难度。

阻碍技术创新

单体应用往往使用统一的技术平台或方案解决所有的问题,团队中的每个成 员都必须使用相同的开发语言和框架,要想引人新框架或新技术平台会非常 困难。例如,一个使用 Struts 2构建的、有100万行代码的单体应用,如 果想要换用 Spring MVC ,毫无疑问切换的成本是非常高的。

2.4、单体架构的后阶段

分层开发

分层的开发的目的:

为了解决容错性差,比如用户查询数据导致sql异常,会导致整个页面无法访问,从而导致整个服务器的宕机,此时,我们可以使用分层开发,每一个如果发生错误的话,在上一层可以进行异常捕获,这个错误就可以不让用户看到。

分层的开发的好处:提高系统的维护性,解决容错性问题,后面就总结出MVC设计模式(MVC架构解决方案)。分层开发,还可以把服务器分离部署(把数据库和应用程序分开部署)。

特点和好处:

MVC分层开发能够解决基本的容错性问题,数据库和项目部署分离。但是随着互联网的开发,网站的访问量的持续增加,单台的应用服务器已经无法满足用户的需求。

2.5、单体架构提高并发访问量

服务器集群:就是服务器集群就是指将很多服务器集中起来一起进行同一种服务,在客户端看来就像是只有一个服务器。集群可以利用多个计算机进行并行计算从而获得很高的计算速度,也可以用多个计算机做备份,从而使得任何一个机器坏了整个系统还是能正常运行。

随着业务的扩展,大部分公司会将单体应用进行集群式部署,并增加负载均衡器,还需要增加集群部署的缓存服务器和文件服务器,并将数据库读写分离,以应对用户量的增加带来的高并发访问量。

2.6、单体架构使用服务器集群及存在的不足

代码可读性,可维护性差;

面对海量用户,数据库会成为瓶颈,需要使用分库分表;

持续交付能力差,业务越复杂,代码越多熟悉成本高。


三、垂直架构

3.1、垂直架构概念

访问量逐渐增大,单体架构单加集群节点带来服务器性能越来越小。比如有的模块是计算密集型的,它需要强劲的 CPU ;有的模块则是 IO 密集型的,需要更大的内存。由于这些模块部署在一起,不得不在硬件 的选择上做出妥协。因此我们通常需要将应用拆成互不相干的几个应用,这就称之为垂直架构 。

3.2、垂直架构的优缺点

优点:

系统拆分实现了流量分担,解决了并发问题

可以针对不同模块进行优化

方便水平扩展,负载均衡,容错率提高

系统间相互独立

缺点:

服务之间相互调用,如果某个服务的端口或者ip地址发生改变,调用的系统得手动改变

搭建集群之后,实现负载均衡比较复杂

会员项目、订单项目、支付项目、优惠券等。项目与项目之间进行webservice、RPC远程通信等。每个项目中都有自己独立的数据库(redis等),

分布式架构拆分

会员:登录、注册、修改密码。

订单:下单,查询订单。

3.1、分布式架构特点

以单体架构规模的项目为单位进行垂直划分项目,即将一个大项目拆分成一个一个单体结构项目。

项目与项目之间的存在数据冗余,耦合性较大,比如上图中三个项目都存在客户信息。

项目之间的接口多为数据同步功能,如:数据库之间的数据库,通过网络接口进行数据库同步。

3.2、分布式架构优缺点

优点:

项目架构简单,前期开发成本低,周期短,小型项目的首选。

通过垂直拆分,原来的单体项目不至于无限扩大。

不同的项目可采用不同的技术。

缺点:

复杂应用的开发维护成本变高,部署效率逐渐降低。因为随着业务功能的不断膨胀,代码全量编译和部署一次所需的时间非常长。

团队协作效率差,部分公共功能重复开发,代码重复率居高不下。

系统可靠性变差。垂直架构将所有的应用模块都部署到一个进程中,如果某个应用接口发生故障,例如内存泄漏,会导致整个节点宕机。

四、SOA架构(面向服务架构)

HClient:将共同的业务逻辑进行拆分,拆分成独立的项目进行部署。

服务化:面向业务逻辑层开发。

项目:包含业务逻辑层和视图层。服务:只包含业务逻辑层,没有视图层。

重点术语剖析:

负载均衡器:分发高并发的网络请求,用户的访问被分派到不同的应用服务器。用户增加时,添加应用服务器即可。

缓存服务器:缓解数据库的数据以及数据库读取的压力。

五、微服务架构

5.1、微服务架构概念

微服务架构:将单体应用拆分为多个高内聚低耦合的小型服务,每个小服务运行在独立进程,由不同的团队开发和维护,服务间采用轻量级通信机制,独立自动部署,可以采用不同的语言及存储。

单体架构整个团队维护开发一个大工程及一个单库,到了微服务架构,用户请求经过API Gateway被路由到下游服务,服务之间以轻量级通信协议进行通信,服务通过注册中心发现彼此,每个服务都有专门的开发维护团队,每个服务对应独立的数据库,服务独立开发,独立部署和上线。

5.2、微服务架构的特点

将系统服务层完全独立出来,并将服务层抽取为一个一个的微服务。

微服务遵循单一原则(一个服务做一件事)。

微服务之间采用RESTful等轻量协议传输。

5.3、微服务架构的优缺点

优点:

服务拆分粒度更细,有利于资源重复利用,提高开发效率。

可以更加精准的制定每个服务的优化方案,提高系统可维护性。

微服务架构采用去中心化思想,服务之间采用RESTful等轻量协议通信,相比ESB更轻量。

适用于互联网时代,产品迭代周期更短。

单个微服务启动较快

技术栈不受限

缺点:

微服务过多,服务治理成本高,不利于系统维护。

分布式系统开发的技术成本高(容错、分布式事务等),对团队挑战大。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,482评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,377评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,762评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,273评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,289评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,046评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,351评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,988评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,476评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,948评论 2 324
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,064评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,712评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,261评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,264评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,486评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,511评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,802评论 2 345