暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

脱离业务的架构都是耍流氓

IT乌托邦 2021-02-02
854

本篇是围绕"软件开发第一性原理"浅谈的的第3篇-软件架构演变的原理


前两篇从软件的基础部分,设计部分分别阐述了"软件运行起来涉及的基础原理"和"软件设计中如何对项目进行落地".简单加以总结:

  1. 关心程序技艺的细节(软件基础原理部分)

  2. 设计是为了让您能够长期轻松地更改软件.(软件设计原理部分)

 

今儿浅谈的话题是每个程序员向往的职业高点,偏架构核心的一些原理.也是边学边思考.给自己的架构之路垫块石头.


我们知道算法和系统运行主要围绕两个指标来思考: 运行时间和内存消耗。


解决系统中业务带来的压力,架构的原理主线主要也是围绕"空间换时间"的偏多.比如系统中Redis在内存上做的缓存策略.相反,在通信过程中为了更快更多的传输数据,我们会考虑使用"时间换空间",通过对数据的压缩来传输更多的数据.所以我们想到架构演进的时候,首先想到的三个字就是:加机器. 


    不过从软件架构生命周期的角度,我们可以把架构的演进比如是一颗树成长的过程.从产品idea的萌芽期,到产品长出来的时间很快. 而随着业务的不断成长, 单体的服务的响应服务变慢,就需要进行细化延伸.绕系统业务目标不断地增长,同时需要把服务器的不断迭代.就像树在扎根. 其中围绕出现的问题给出的原理就是通过拆分,集群,分布式.高可用来解决并发带来的业务压力.


    在时间换空间来说, 主要是通过缓存冗余的方式来解决..通过数据的前置来加快响应的速度.这个思路在软件中很常用.


    软件架构的发展经历了由单体架构、垂直架构、分布式架构到流动计算架构的演进过程,如下图:



    我们会围绕把单体服务拆成各个功能独立的服务器. 从开始的业务服务和数据库和文件系统都在一个单机上开始.随着业务对内存带来的压力,我们把数据库服务和文件服务单独部署到服务器上,以方便系统更稳定的运行.  

    后面会围绕应用的单个应用能力做集群,比如web集群. 然后基于负载策略进行转发分配. 再到后面围绕分布式做进一步的拆分, 数据的缓存前置. 不同系统之间通过消息队列的异步架构. 前端对检索的需求做的搜索引擎,后台对数据的剧增进行的分库分表. 所有这些都在围绕架构的可用性, 安全性,稳定性来做延伸.



整个数据量达到一定量后,会进一步围绕数据进行挖掘和分析来辅助业务的发展. 大数据的架构就从数据采集,数据分析,数据呈现来帮助业务发展提供决策数据支撑. web从互联网软件的"软"部分来提供服务, 同时物联网也从与硬件打通来提供更丰富的服务体验.围绕"软件"和"硬件"的结合.在数据的决策上,初步的AI就可以拥有"千里眼"和"顺风耳"的功能,以方便辅助我们在方方面面提高工作效率.下图是在工业方面的架构演进.



最后提到了区块链技术,技术永远是服务社会的和推进社会发展的.区块链的创新是通过技术的重新组合结合场景的最佳实践.它打通了密码学,分布式P2P,共识算法等等,通过固定的算法来重新构造去中心化的数据记录方式,通过数据的区块连续性保障数据的不可篡改.

 

最后回归主题,架构的演变是公司业务发展的推动,也是验证公司业务价值的侧面体现.没有一成不变的架构,没有最好的架构.只有符合当前业务场景的架构才是最好的架构.

 

为了迎合业务的发展需要,我们要设计可拓展到程序来迎合架构的不断演变.也是一脉相承.

 

架构的部分自己的理解不深,很浅显地表达下自己的一点想法.欢迎拍砖.

文章转载自IT乌托邦,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论