1. 微服务架构的特点
1.1 理解微服务
软件架构经理了从单体架构、垂直架构、SOA架构到微服务架构的过程
单体架构:
- 所有的功能模块,放在同一个工程里面开发
- 所有的功能打一个war包部署到服务器
- 应用于数据库分开部署
- 通过部署应用集群和数据库集群提高系统的性能和并发
- 优点就是简单,开发成本低,缺点就是所有的功能都放在同一个工程里面开发,不易于开发、扩展以及升级维护,而且性能扩展只能通过扩展集群节点、成本高、有瓶颈。
垂直架构
- 以单体结构规模的项目为单位进行垂直划分,即将一个大型的项目拆分成一个个的单体结构的项目
- 项目与项目之间存在数据冗余,耦合性较大。比如子模块中都可能会引用用户信息
- 项目之间的接口多为数据同步接口
- 优点:项目架构简单、前期开发成本低、周期短、小型项目首选。 同时通过业务的垂直拆分,原来的单体项目不至于无限扩大,不同的项目可以采用不同的技术实现
- 缺点: 全部的功能都集成在一个工程中,对大型项目不易于开发、扩展以及维护
SOA架构
- 基于SOA架构的思想是讲重复公用的功能抽取为组件,以服务的方式给各个系统提供服务
- 各个项目(系统)与服务之间采用webservice/rpc 等方式进行通讯
- ESB企业服务总线作为项目与服务之间的通讯桥梁
优点:
- 将重复的功能抽取为组件,提高开发效率,提高可维护性,可重用行和可扩展性
- 可以针对不同服务的特点制定集群或者优化方案
- 采用ESB减少系统中的接口的耦合
缺点:
- 系统与服务的界限模糊,不利于开发以及维护
- 虽然使用了ESB总线,但是服务的接口协议不固定,种类繁多,不利于维护
- 抽取的服务粒度过大,系统与服务之间的耦合性高
微服务架构
- 将系统服务层完全独立出来,并见服务层抽取为一个一个的微服务
- 微服务遵循单一原则
- 微服务之间采用RESTFul等轻量协议传输
优点:
- 服务拆分力度更加细,有利于资源的重复利用,提高开发效率
- 可以更加精准的指定每个服务的优化方案,提高系统的可维护性
- 微服务架构采用去中心化思想,服务之间采用RESTful等轻量级协议通信,相比ESB更轻
- 适用于互联网时代,产品迭代周期短
缺点:
- 微服务过多,服务治理成本高,不利于系统的维护
- 分布式系统开发的技术成本高(容错,分布式事务等),对团队的技术能力挑战比较高
1.2 集群、分布式、微服务的理解
- 分布式:一个业务拆分多个子业务,部署在不同的服务器上
- 集群: 同一个业务、部署在多个服务器上
- 微服务的意思也就是将模块拆分成一个独立的服务单元、通过接口来实现数据的交互
分布式是指将不同的业务分布在不同的地方。而集群指的是将几台服务器集中在一起,实现同一业务。
分布式中的每一个节点,都可以做集群。而集群并不一定就是分布式的。
分布式,从窄意上理解,也跟集群差不多,但是它的组织比较松散,不像集群,有一个组织性,一台服务器垮了,其它的服务器可以顶上来。
分布式的每一个节点,都完成不同的业务,一个节点垮了,那这个业务就不可访问了。
好的设计应该是分布式和集群的结合,先分布式再集群,具体实现就是业务拆分成很多子业务,然后针对每个子业务进行集群部署,这样每个子业务如果出了问题,整个系统完全不会受影响。
微服务的设计是为了不因为某个模块的升级和BUG影响现有的系统业务。微服务与分布式的细微差别是,微服务的应用不一定是分散在多个服务器上,他也可以是同一个服务器。
分布式和微服的架构很相似,只是部署的方式不一样而已。
分布式需要做好事务管理。
集群模式需要做好session共享,确保在不同服务器切换的过程中不会因为没有获取到session而中止退出服务。
一般配置Nginx*的负载容器实现:静态资源缓存、Session共享可以附带实现,Nginx支持5000个并发量。
1.3 什么是微服务
为适应企业的发展,提高软件研发的生产力,降低软件研发的成本,软件架构也做了升级和优化,将一个独立的系统拆分为若干个小的服务,每个小服务运行在不同的进程中,服务于服务之间采用http轻量协议传输数据,每个服务所拥有的功能具有独立性强、耦合度高的特点,这样的设计就实现了单个服务内的高内聚,服务于服务之间的低耦合效果,这一个一个的小服务就是微服务,基于这种方法设计的系统架构即为微服务架构
2. 微服务技术栈的技术构成
- 负载均衡、网关路由:高可用、集群部署,校验、请求转发、服务集成
- 服务治理:服务的注册、发现
- 容错:避免雪崩
- 监控跟踪:监控资源的利用、服务的响应、容器资源利用
- 消息总线:消息队列、异步通讯
- 配置管理:统一配置管理
2.1 Spring Cloud
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
2.2 Spring Cloud技术栈
现有微服务技术结构
服务治理:Duboo、Dubbox、Eureke、Netflix等
配置管理:Disconf、QConf、Diamood等
服务跟踪:Hydra、Zipkin、Sleuth等
Spring Cloud集成了众多的解决方案,提供一站式微服务解决方案。(Nexflix公司)
Spring Cloud的子项目,大致可分成两类:
一类是对现有成熟框架”Spring Boot化”的封装和抽象,也是数量最多的项目;
第二类是开发了一部分分布式系统的基础设施的实现,如Spring Cloud Stream扮演的就是kafka, ActiveMQ这样的角色。对于我们想快速实践微服务的开发者来说,第一类子项目就已经足够使用,如:
- Spring Cloud Netflix
是对Netflix开发的一套分布式服务框架的封装,包括服务的发现和注册,负载均衡、断路器、REST客户端、请求路由等。
- Spring Cloud Config
将配置信息中央化保存, 配置Spring Cloud Bus可以实现动态修改配置文件
- Spring Cloud Bus
分布式消息队列,是对Kafka, MQ的封装
- Spring Cloud Security
对Spring Security的封装,并能配合Netflix使用
- Spring Cloud Zookeeper
对Zookeeper的封装,使之能配置其它Spring Cloud的子项目使用
- Spring Cloud Eureka
Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件中的一部分,它基于Netflix Eureka 做了二次封装,主要负责完成微服务架构中的服务治理功能。
网友评论