一、服务架构分类:
1、服务架构大致分为两类,分别为单体架构和分布式架构
(1)单体架构:应用程序无论如何分层,都是一个解决方案,或者说都是一个项目。简单的理解就是将所有的功能集中在一个项目中开发,打成一个包部署。
优点:架构简单;部署成本低;集中管理;没有分布式的损耗,都是系统进程内的通信等。
缺点:不好维护,耦合度较高;集群负担大;无法应付高并发和搞数据量的场景;迭代更新速度慢等。
适用于一些小型项目,例如:学生系统
(2)分布式架构:应用程序根据业务功能对系统进行不同粒度大小的拆分,每个业务模块都将会作为一个独立的项目开发,称为一个服务。
优点:降低了服务的耦合度;有利于系统服务的升级拓展;隔离性强;分布式管理;模块代码具有较高的复用性;等。
缺点:运维、监控、部署难度提高;架构复杂;网络传输分布式损耗成本;不适合高并发和大数据的环境等。
适用于一些大型项目,例如:京东、淘宝
二、微服务架构
微服务是一种经过良好架构设计的分布式架构方案,微服务架构有以下特征:
①单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务功能,做到单一职责,避免重复开发。
②面向服务:微服务对外暴露业务接口。
③自治:团队独立、技术独立、数据独立(独立的数据库)、部署独立。
④隔离性强:服务调用做好隔离、容错、降级、避免出现级联问题。
三、微服务结构中的构成元素
服务集群:将一个服务拆分成不同的模块组件,而每个拆分的模块组件都要遵循单一职责的原则以及面向服务,对外暴露接口。
注册中心:记录微服务集群中每一个服务的ip、端口、以及功能等。负责拉取或注册服务信息。
配置中心:可以统一的管理整个服务群里的配置,可以实现配置的热更新。
服务网关:对访问发起者的身份的校验,并且把用户的请求路由(负载均衡)到具体的服务上。
分布式缓存:为了应付高并发的数据访问,将用户需求首先放置于分布式缓存中,未命中之后再去数据库中查询。
分布式搜索:是将数据分散存储在多台独立的设备上。利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息。
消息队列:是一种先进先出的队列型数据结构,实际上是系统内核中的一个内部链表。通过消息队列实现事件总线,基于事件和状态构建微服务和工作队列的调度与执行机制。
分布式日志服务:统计整个集群中所有服务的运行日志,统一的进行存储和分析等。
系统监控链路追踪:实时监控和追踪每个服务节点的运行状态、CPU的负载、内存的占用等。
三、微服务技术的对比
微服务技术对比
Dubbo技术 | SpringCloud | SpringCloudAlibaba | |
注册中心 | zookeeper、Redis | Eureka、Consul | Nacos、Eureka |
服务远程调用 | Dubbo协议 | Feign(http协议) | Dubbo、Feign |
配置中心 | 无 | SpringCloudConfig | SpringCloudConfig、Nacos |
服务网关 | 无 | SpringCloudGateway、Zuul | SpringCloudGateway、Zuul |
服务监控和保护 | dubbo-admin、功能较弱 | Hystrix | Sentinel |
SpringCloudAlibaba相当于整合兼容了Dubbo和SpringCloud两种架构。
阿里巴巴的Nacos的强大之处在于即支持Dubbo的远程调用,同样也支持Feign的远程调用。
四种常见微服务架构的企业需求:
①:SpringCloud+Feign
使用SpringCloud技术栈;服务接口采用Restful风格;服务调用采用Feign方式。
②:SpringCloudAlibaba+Feign
使用SpringCloudAlibaba技术栈;服务接口采用Restful风格;服务调用采用Feign方式。
③:SpringCloudAlibaba+Dubbo
使用SpringCloudAlibaba技术栈;服务接口采用Dubbo协议标准;服务调用采用Dubbo方式。
④:Dubbo原始模式(较为少见)
基于Dubbo的技术体系;服务接口采用Dubbo协议标准;服务调用采用Dubbo方式。