架构-基础篇

参考资料:
极客时间-从0开始学架构 李运华
《Node.js实战》作者:[英]亚历克斯·杨,[美]布拉德利·马克等 译者:吴海星 出版社:人民邮电出版社

架构的基本概念

模块和组件都是系统的组成部分,只是从不同的角度拆分系统而已:
从逻辑的角度来拆分系统后,得到的单元就是“模块”;从物理的角度来拆分系统后,得到的单元就是“组件”。划分模块的主要目的是职责分离;划分组件的主要目的是单元复用。

框架关注的是“规范”(组件规范、框架是提供基础功能的产品),架构关注的是“结构”(软件系统的“基础结构”)。

架构的重新定义:软件架构指软件系统的顶层结构。
解释:

  1. “系统是一群关联个体组成”,这些“个体”可以是“子系统”“模块”“组件”等;架构需要明确系统包含哪些“个体”。
  2. 系统中的个体需要“根据某种规则”运作,架构需要明确个体运作和协作的规则。
  3. 维基百科定义的架构用到了“基础结构”这个说法,我改为“顶层结构”,可以更好地区分系统和子系统,避免将系统架构和子系统架构混淆在一起导致架构层次混乱。

小结:架构是顶层设计;框架是面向编程或配置的半成品;组件是从技术维度上的复用;模块是从业务维度上职责的划分;系统是相互协同可运行的实体。

服务器端框架:

❑ API框架——用于搭建Web API的库,有协助组织程序结构的框架支持。LoopBack将自己定义为这类框架。

❑ HTTP服务器库——所有基于Express的项目都可以归为这一类,包括Koa和Kraken.js。这些库帮我们围绕HTTP动词和路由搭建程序。

❑ HTTP服务器框架——用来搭建模块化HTTP服务器的框架。hapi就是这种框架。

❑ Web MVC框架——模型-视图-控制器框架,Sail.js就是这种框架。

❑ 全栈框架——这些框架在服务器端和浏览器上用的都是JavaScript,并且两端可以共享代码。这被称为同构代码。DerbyJS是个全栈MVC框架。

大多数Node开发人员都把框架理解为第二种:HTTP服务器库。

架构设计的目的

是为了解决软件系统复杂度带来的问题。

架构是为了应对软件系统复杂度而提出的一个解决方案。个人感悟是:架构即(重要)决策,是在一个有约束的盒子里去求解或接近最合适的解。这个有约束的盒子是团队经验、成本、资源、进度、业务所处阶段等所编织、掺杂在一起的综合体(人,财,物,时间,事情等)。架构无优劣,但是存在恰当的架构用在合适的软件系统中,而这些就是决策的结果。

复杂度来源:高性能

一方面是单台计算机内部为了高性能带来的复杂度;另一方面是多台计算机集群为了高性能带来的复杂度。

操作系统发展到现在,如果我们要完成一个高性能的软件系统,需要考虑如多进程、多线程、进程间通信、多线程并发等技术点,而且这些技术并不是最新的就是最好的,也不是非此即彼的选择。在做架构设计的时候,需要花费很大的精力来结合业务进行分析、判断、选择、组合,这个过程同样很复杂。举一个最简单的例子:Nginx 可以用多进程也可以用多线程,JBoss 采用的是多线程;Redis 采用的是单进程,Memcache 采用的是多线程,这些系统都实现了高性能,但内部实现差异却很大。

通过大量机器来提升性能,并不仅仅是增加机器这么简单,让多台机器配合起来达到高性能的目的,是一个复杂的任务,常见的方式有任务分配和任务分解(业务越来越复杂,单台机器处理的性能会越来越低。为了能够继续提升性能)
任务分配
任务分解

复杂度来源:高可用

高可用的“冗余”解决方案,单纯从形式上来看,和之前讲的高性能是一样的,都是通过增加更多机器来达到目的,但其实本质上是有根本区别的:高性能增加机器目的在于“扩展”处理性能;高可用增加机器目的在于“冗余”处理单元

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值