系统架构课堂笔记 | 青训营笔记

70 阅读6分钟

这是我参与「第五届青训营」伴学笔记创作活动的第2天

初识系统架构

对于一个Web应用的开发以及后续的业务开展来说,系统架构是保证开发过程的顺利和运行维护的基础。一个合适的系统架构能节省网络资源的开销和提高系统的容错和稳定性。

重点内容

1.什么是系统架构?

系统架构的目的是设计软件系统的顶层结构,通过结合需求、约束等软件系统需要关心的问题来形成一个架构,再根据该系统架构进行相关的系统开发。

2.如何选择合适的系统架构?

通常地,先从需求出发,考虑软件系统需要达到的规模。再从业界寻找类似的系统规划进行参考,结合其他优秀的系统架构中的设计来设计适合当前软件系统的架构。 例如,我们需要考虑系统的类型,是CPU密集型还是IO密集型等因素来设计合理的架构。

当然,达到一定规模量级的软件系统其容灾能力是至关重要的,对于系统中的模块,我们需要控制其爆炸半径,避免出现星火燎原的状况。

3.常见的系统架构模式和技术

单体架构 常见的单体架构有spring mvc和python的Django等CS(Client Server)架构,其优点是部署和测试便捷,易于实现。缺点也很明显,随着软件系统的逐渐庞大,后续的拓展和维护显得格外困难,并且容灾的能力也十分差劲。此外,对于软件开发人员团体中的限制大,要求开发人员都需要使用同一编程语言和框架,不利于新技术的研发和创新。

image.png

分布式架构分布式架构是单体架构的并发拓展,通过将软件系统的业务拆分为多个模块,将业务部署在不同的服务器上,各个服务器之间通过接口来实现数据的交互。分布式架构很好的解决了单体架构中拓展性差,可靠性差的缺点。通过拆分不同业务,让各个服务器的业务逻辑清晰,实现了解耦。缺点是每个服务器之间需要频繁的进行通信,一定程度上增加了软件系统的网络开销。

image.png

微服务架构 常见的微服务架构有Spring Cloud、Dubbo等框架。 微服务架构主要实现的是中间件的分解,将软件系统拆分成很多个小服务,这些小服务可以部署在不同服务器上也可以部署在同一服务器的不同容器上。 由于小服务的代码量小,逻辑简单,所以启动快。同一类型的服务的开发条件不受限,开发人员可以使用不同的语言和框架来实现同一服务功能。 缺点是接口调整成本高,容灾能力受限,可能出现重复劳动的情况。

image.png

知识点

C10K问题

C10K问题(Concurrent 10000 Connection) 指的是服务器如何支持10k个并发连接。最初的服务器是基于线程/进程模型的,也就意味着每新建一个TCP连接就要开启一个新的线程/进程,对于10k个连接,就需要操作系统分配10k的线程,这对于操作系统来说是难以承受的。

C10K问题的关键在于CPU的负载,例如,线程/进程创建多了,密集的I/O和上下文切换会带来巨大的资源占用,解决C10K问题的关键就是如何减少CPU核心资源的占用。

常见的解决方案有异步非阻塞回调和使用协程。

异步非阻塞回调:即通过函数设置回调函数,在主函数线程执行完毕后再调用回调函数来获取执行结果,这样做的好处是当线程量大并且业务逻辑复杂时,不会出现大量线程阻塞的情况,减少操作系统资源的开支。

协程:协程的实现上都是试图用一组少量的线程来实现多个任务,一旦某个任务阻塞,则可能用同一线程继续运行其他任务,避免大量上下文的切换带来的资源浪费。

但由于异步非阻塞回调在代码执行上时顺序执行即不会进行上下文的切换,相对于协程来说性能更好。

云计算

云计算 的精髓就是把有形的产品(网络设备、服务器、存储设备、各种软件等)转化为服务产品,并通过网络让人们远距离在线使用,使产品的所有权和使用权分离。 云计算的五大特征:

自助服务: 云计算的用户不需要服务商的协助就可以自行地使用云端的计算资源。

广泛的网络访问: 用户可以随时随地使用不同的终端进行对云端的计算资源的使用。

资源池化: 云计算资源需要通过池化才能以多租户的形式租给用户使用,同时池化能够根据不同消费者的使用需求动态地进行物理和虚拟资源的分配和收费。

快速弹性: 用户能方便快捷地进行获取以及释放云计算资源,需要时能快速获取资源从而扩展计算能力,不需要时能迅速释放资源,以便降低计算能,从而减少资源的使用费用,实现负载的水位均衡。

计费服务: 云计算资源的使用服务是需要收取费用的,具体的收费标准依靠的是消费者对云计算资源的使用量和使用时长。

服务网格

服务网格(Service Mesh)是一个专门处理服务通讯的基础设施层。它的职责是在由云原生应用组成服务的复杂拓扑结构下进行可靠的请求传送。在实践中,它是一组和应用服务部署在一起的轻量级的网络代理,并且对应用服务透明。

服务网格从总体架构上来讲比较简单,不过是一堆紧挨着各项服务的用户代理,外加一组任务管理组件组成。

管理组件被称为控制层或控制平面(control plane),负责与控制平面中的代理通信,下发策略和配置。

代理在服务网格中被称为数据层或数据平面(data plane),直接处理入站和出站数据包,转发、路由、健康检查、负载均衡、认证、鉴权、产生监控数据等。

一个常见的服务网格部署网络结构如下:

image.png

总结

通过本节课,我学习到了关于系统架构的各种模式以及其各自的利弊。以及对C10K问题及其解决方案有了深刻的认识,包括异步非阻塞回调和协程。

引用参考

  1. 四种常见系统架构介绍
  2. C10k问题简述
  3. 云计算主要包含哪些基本特征?
  4. 总结:服务网格(Service Mesh)