如果是以上的原因,就失去了做架构的意义,是为了做架构而做架构,可能会浪费人力物力得不偿失。那么做架构的目的是什么呢?
架构设计的主要目的是为了解决软件系统复杂度带来的问题
高性能
为了提高性能又从两个方面可以提升
计算机内部复杂度的关键就是操作系统,操作系统和性能最相关的是进程和线程。人们发明出进程,一个进程对应一个任务,会占用独立的内存。多个进程之间为了相互通信所以设计各种通信方式:管道、消息队列、共享储存等等。
人们为了解决单线程会阻塞用户使用的问题所以发明了多线程,多进程多线程可以使性能更大的提升。
在互联网时代,有时用户访问量会急剧升高。例如2017年春节微信红包收发红包每秒达到 76 万个。为了解决这种问题,单机的性能提升是解决不了问题的,只能通过加大机器的数量来得到提升。
通过集群的方式提高性能,最常见的两种方式是任务分配和任务分解。
任务分配:任务分配是指每台服务器都可以都处理完整的业务任务,由任务分配器分配任务。
任务分解:任务分解是指把复杂的系统拆解成不同的小功能。即不同的业务服务器。
高可用
系统无中断地执行其功能的能力,代表系统的可用性程度,是进行系统设计时的准则之一。--维基百科
硬件会出故障,软件会出bug都会造成中断现象。那么如何提高无中断就是提高高可用的方式。只能通过冗余来提高高可用。一台服务器不行就两台,两台不行就四台。
由此看来,高性能和高可用都是通过多台服务器来提高目的,那么他们之间有什么区别呢?高性能通过增加机器的目的是扩展提高性能,高可用是通过增加机器的目的冗余处理单元。
其中高可用的复杂度的来源有两种:计算高可用和存储高可用
计算高可用: 这里的“计算”指的是业务的逻辑处理。计算有一个特点就是无论在哪台机器上进行计算,同样的算法和输入数据,产出的结果都是一样的.这里的复杂度是在于任务分配器是如何分配服务,是一主多备还是多主多备。
存储高可用:用户在一台机器上计算的业务,如果同步到另一台机器上,这会存在传输的问题,所以可能会出现时间差的问题给用户造成不良的体验。所以存储高可用的复杂度不在于如何备份数据,而在于如何减少或者规避数据不一致对业务造成的影响。
软件的开发在需求上线后也依然会有需求的变更,所以如果在需求变更的时候以很少的开发量或者不变的情况下去实现功能是最好的结果。那么可扩展的复杂度在哪里呢?
那么如何提高系统的可扩展性呢?
基于上述原因,互联网系统的架构安全目前并没有太好的设计手段来实现,更多地是依靠运营商或者云服务商强大的带宽和流量清洗的能力,较少自己来设计和实现。
以上就是我对于基础架构的初步理解。
本文章参考:《从 0 开始学架构》-- 李运华 链接:https://time.geekbang.org/column/article/6458
- END -
奇舞团是 360 集团最大的大前端团队,代表集团参与 W3C 和 ECMA 会员(TC39)工作。奇舞团非常重视人才培养,有工程师、讲师、翻译官、业务接口人、团队 Leader 等多种发展方向供员工选择,并辅以提供相应的技术力、专业力、通用力、领导力等培训课程。奇舞团以开放和求贤的心态欢迎各种优秀人才关注和加入奇舞团。