
一、架构演进
随着互联网的发展,网站规模也在不断扩大,进而导致系统架构也在不断的进行变化。
从互联网兴起到现在,系统架构大体经历了下面几个过程:
单体应用架构 --> 垂直应用架构 --> 分布式架构 --> SOA架构 --> 微服务架构 --> Service Mesh(服务网格化)
1.1、单体应用架构
【简述】
互联网早期,网站流量较小,只需一个应用即可
【优点】
- 对于小型项目来讲,开发、维护简单(项目部署在单节点上,便于维护)
【缺点】
-
对于大型项目来讲不易开发和维护
-
项目模块间耦合度较高,无法针对不同模块进行优化和水平扩展
1.2、垂直应用架构
【简述】:互不相干的独立服务
随着访问量增大,单一应用的服务能力只能靠整体增加节点来应对,但并不是所有模块访问量并不大,不需要那么多节点来应对。
所谓垂直应用架构,就是讲原来的应用拆分成互不相干的几个应用,从而可以针对不同模块进行优化和水平扩展
【优点】
-
可以针对不同模块进行优化和水平扩展
-
各系统能够分担整体访问的流量,解决了并发问题。
-
一个系统发生了故障,不影响其他系统的运行情况,提高了整体的容错率。
【缺点】
-
拆分后的各系统之间相对比较独立,无法进行互相调用。
-
各系统难免存在重叠的业务,会存在重复开发的业务,后期维护比较困难。
1.3、分布式架构
【简述】系统拆分,相互通信
分布式系统就是将不同的服务模块部署在多台不同的服务器上,然后通过远程调用协同工作,共同对外提供服务。对于用户来说,就像是一台计算机在服务一样。
系统演变为垂直应用架构之后,当垂直应用越来越多,重复编写的业务代码就会越来越多。
此时,我们需要将系统中重复的部分拆分出来,形成统一的服务供其他系统或者业务模块来进行调用。此时,系统就会演变为分布式架构。
1.3.1、SOA架构
【简述】系统按服务粒度拆分,提供通信统一调度
SOA(面向服务)架构是一种分布式架构,将系统按照服务粒度拆分,并增加一个统一的调度中心来对集群进行实时管理服务间通信。
【优点】
- 将重复的业务代码抽象出来,形成公共的服务,提高了代码的复用性、可维护性
- 可针对不同服务特点按需伸缩
- 增加了注册中心,解决了各个服务之间的自动注册与发现,方便了服务间通信
【缺点】
- 系统拆分粒度较大,服务间还是有较多的功能复用
1.3.2、微服务架构
【简述】根据功能细粒度拆分,使用轻量级的RPC框架进行通信,独立部署
微服务架构更强调服务的彻底拆分,是将系统根据功能细粒度拆分为一个个小的可以独立部署的微服务,服务间通过轻量级的RPC框架进行通信。每个服务可以使用不同的语言、使用不同的数据库。
【优点】
- 服务彻底拆分,各服务独立打包、独立部署和独立升级。
- 微服务之间可以采用轻量级RPC框架进行通信。
【缺点】
- 分布式系统开发的技术成本高(容错、分布式事务等)
- 多服务运维难度增大
二、微服务架构概念
2.1、什么是微服务
1、【架构思想】微服务是一种项目架构思想
2、【组件化与多服务】微服务是以开发一组小型服务的方式来开发一个独立的应用系统。
3、【独立进程、轻量级通信】其中每个小型服务都运行在自己的进程中,并采用HTTP这样轻量的机制来相互通信。
4、【独立开发、独立维护、独立部署】这些服务围绕业务功能进行构建(围绕业务功能拆分),并能通过全自动的部署机制来进行独立部署。
5、【跨语言、跨平台】这些微服务可以使用不同语言来编写,并使用不同的数据存储技术。
2.2、RPC框架
2.2.1、什么是RPC?
Remote Procedure Call 远程过程调用
【核心功能】:像调用本地方法一样,调用远程方法
2.2.2、RPC原理

2.2.3、一些概念区分
RPC与HTTP啥关系?
两个都是协议,用于解决tcp传输粘包问题。
HTTP是通用协议,RPC的定制化更高,比如可以将HTTP存储数据用到的json换为体积更小的protobuf,从而提升性能
HTTP一般用于客户端与服务端之间的请求,因为协议比较通用
RPC一般应用于内部服务之间的请求,可以自定义相关规则,提升传输性能

Okhttp、RestTemplate、Dubbo、OpenFeign是RPC吗?为什么?
Dubbo、OpenFeign是RPC框架,Okhttp、RestTemplate不是RPC框架
因为,Dubbo、OpenFeign是通过调用本地方法,从而达到实现调用远程方法。而Okhttp、RestTemplate是直接发送了http请求,调用远程的方法(浏览器直接请求后端接口也是如此)。
三、常见问题及解决方案
3.1、微服务常见问题
核心问题:网络不可靠
- 服务较多,如何部署运维?(docker、k8s)
- 服务很多客户端如何访问?(nginx、网关)
- 服务之间如何相互高效通信?(RPC、注册与发现、负载均衡)
- 服务如何治理?(熔断、限流)
- 服务如何监控?(日志监控、调用链监控、指标监控)
- 分布式问题?(分布式事务、分布式任务调度)
3.2、常见解决方案
针对微服务面临的问题和挑战,谷歌、阿里、Netflix等内部都有自己的一套成熟解决方案,并提供给我们选择和使用。





