微服务是一种架构风格,在学习微服务之前,先简单了解架构及其发展。
一、架构发展
1.单体架构
在小微企业比较常见,典型代表就是一个应用、一个数据库、一个web容器就可以跑起来。
在两种情况下可能会选择单体架构:一是在企业发展的初期,为了保证快速上线,采用此种方案较为简单灵活;二是传统企业中垂直度较高,访问压力较小的业务。在这种模式下对技术要求较低,方便各层次开发人员接手,也能满足客户需求。
单体架构图如下:
其优点是:开发、测试简单(在一个应用内进行,不存在多个应用之间的互调等);部署简单(将应用打成一个war包放入tomcat中即可);水平扩展简单(当应用负载能力不行的时候,将该应用复制部署到多个服务器中,通过负载均衡机制调用服务即可)。
其缺点是:牵一发动全身的问题,一个小修改就需要整个应用重新部署,同时分工合作较难。
在单体架构中,技术选型非常灵活,优先满足快速上线的要求,也便于快速跟进市场。
2.垂直架构
单体架构发展一段时间后,公司的业务模式得到了认可,交易量也慢慢的大起来,这时候有些企业为了应对更大的流量,就会对原有的业务进行拆分,比如说:后台系统、前端系统、交易系统等。
在这一阶段往往会将系统分为不同的层级,每个层级有对应的职责,UI层负责和用户进行交互、业务逻辑层负责具体的业务功能、数据库层负责和上层进行数据交换和存储。
下面是垂直架构的架构图:
在这个阶段SSH(struts+spring+hibernate)是项目的关键技术,Struts负责web层逻辑控制、Spring负责业务层管理Bean、Hibernate负责数据库操作进行封装,持久化数据。
3.服务化架构(SOA)
如果公司进一步的做大,垂直子系统会变的越来越多,系统和系统之间的调用关系呈指数上升的趋势。在这样的背景下,很多公司都会考虑服务的SOA化。SOA代表面向服务的架构,将应用程序根据不同的职责划分为不同的模块,不同的模块直接通过特定的协议和接口进行交互。这样使整个系统切分成很多单个组件服务来完成请求,当流量过大时通过水平扩展相应的组件来支撑,所有的组件通过交互来满足整体的业务需求。
SOA服务化的优点是,它可以根据需求通过网络对松散耦合的粗粒度应用组件进行分布式部署、组合和使用。服务层是SOA的基础,可以直接被应用调用,从而有效控制系统中与软件代理交互的人为依赖性。
服务化架构是一套松耦合的架构,服务的拆分原则是服务内部高内聚,服务之间低耦合。
下面是服务化架构图:
在这个阶段可以使用WebService或者dubbo来服务治理。
我们发现从单体架构到服务化架构,应用数量都在不断的增加,慢慢的下沉的就成了基础组建,上浮的就成为业务系统。从上述也可以看出架构的本质就是不断的拆分重构:分的过程是把系统拆分为各个子系统/模块/组件,拆的时候,首先要解决每个组件的定位问题,然后才能划分彼此的边界,实现合理的拆分。合就是根据最终要求,把各个分离的组件有机整合在一起。拆分的结果使开发人员能够做到业务聚焦、技能聚焦,实现开发敏捷,合的结果是系统变得柔性,可以因需而变,实现业务敏捷。
4.微服务架构
4.1微服务
是一种架构风格,一个应用是一组小型服务组成,通过http的方式进行消息沟通。
每一个功能点最终都是可独立替换的服务单元。
4.2SOA和微服务的区别
- 微服务架构强调业务系统需要彻底的组件化和服务化,一个组件就是一个产品,可以独立对外提供服务;
- 微服务不再强调传统SOA架构里面比较重的ESB企业服务总线;
- 微服务强调每个微服务都有自己独立的运行空间,包括数据库资源。
- 微服务架构本身来源于互联网的思路,因此组件对外发布的服务强调了采用HTTP Rest API的方式来进行
- 微服务的切分粒度会更小
总结:微服务架构是 SOA 架构思想的一种扩展,更加强调服务个体的独立性、拆分粒度更小。
二、微服务、分布式等概念区别
1.微服务
微服务是一种面向服务的架构(SOA)风格,其中,应用程序被构建为多个不同的小型服务的集合而不是单个应用程序。与单个程序不同的是,微服务让你可以同时运行多个独立的应用程序,而这些独立的应用程序可以使用不同的编码或编程语言来创建。庞大而又复杂的应用程序可以由多个可自行执行的简单而又独立的程序所组成。这些较小的程序组合在一起,可以提供庞大的单程序所具备的所有功能。
2.分布式
所谓分布式,无非就是将一个系统拆分成多个子系统并分布到多个服务器上.即分散部署到不同的服务器上
是指将用户界面、控制台服务、数据库管理三个层次部署在不同的位置上。其中用户界面是客户端实现的功能,控制台服务是一个专门的服务器,数据管理是在一个专门的数据库服务器上实现的。
3.集群
把相同应用复制到不同服务器上
4.区别
微服务是架构设计方式,分布式是系统部署方式
集群是个物理形态,分布式是个工作方式
- 微服务:一个系统拆分成多个子业务,每个子业务即为一个微服务。
- 分布式:一个业务分拆多个子业务,部署在不同的服务器上
- 集群:同一个业务,部署在多个服务器上
1.分布式是指将不同的业务分布在不同的地方。而集群指的是将几台服务器集中在一起,实现同一业务
分布式中的每一个节点,都可以做集群。而集群并不一定就是分布式的
集群一台服务器垮了,其它的服务器可以顶上来。
分布式的每一个节点,都完成不同的业务,一个节点垮了,那这个业务就不可访问了。
示例:火车站买票多个窗口进行相同业务,则可看为集群,饭店吃饭(服务员下单,厨师做饭,收银员收银),则可看为分布式,不同节点负责不同事项(业务)。
2.分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。
3.微服务的应用不一定是分散在多个服务器上,他也可以是同一个服务器。