上一篇文章介绍了什么是架构和架构的分类,作为开发人员的关注点首先是从技术架构开始的,这篇文章的重点就是在技术架构,在技术架构中会涉及到架构风格、架构模式和设计模式,这三者是一种什么关系,这三者和技术架构又什么关系呢?先通过下图对这些关系有一大致的了解。
架构风格和模式
主要引自:https://juejin.im/post/5decf93cf265da33d21e6d1d
架构风格和模式最重要的区分是范围的区别,架构风格非常粗略地告诉我们应该如何组织代码。它的粒度比较大,说明了应用的分层和高层级的模块,这些模块和层次之间如何交互,以及它们的关系;解决反复出现的问题的常见方案就是模式。架构模式解决的就是和架构风格相关的问题。例如,“要实现一个特定层次组合的系统,我们需要哪些类,它们又如何交互”,架构模式对代码的影响相当大,通常会横向地(比如,如何组织同一个层次中的代码)或者纵向地(比如,请求是如何从外层进入到内层处理之后再返回的)影响整个应用。设计模式作用的范围和架构模式不同,它们更局限一些,它们对影响的是代码中某个肯定的部分,对代码的组织影响不多。
- 架构风格是最高抽象级别的应用设计; An Architectural Style is the application design at the highest level of abstraction;
- 架构模式是实现架构风格的一种方式; An Architectural Pattern is a way to implement an Architectural Style;
- 设计模式是解决局部问题的方法。 A Design Pattern is a way to solve a localised problem.
下图列举了架构模式和架构风格的一些例子:
你会发现,架构风格中有「Multilayered」这个架构风格,架构模式里也有「Multilayered」架构模式!好像分层架构既是架构风格,也是架构模式!实际上架构模式中的「分层架构」是架构风格中的「分层架构」的实际应用。
更具有说服力的是CS架构风格,可以看到此架构风格后面有个阐述「2-tier, 3-tier, n-tier exhibit this style」,意思是两层架构、三层架构、n层架构都是CS架构风格的一种表现形式。而可以看到,三层架构是一个架构模式!
这三者整体的关系就如上图那样
技术架构
主要引自:https://www.infoq.cn/article/iNbgrQm2liV1EdZeIFyD
弄明白了上述三者的关系后,我们顺着图向上看,什么是技术架构呢:技术架构 = 解决业务上的技术问题 + 技术方案 + 技术组件 ,下面再细化一下:
解决业务上的技术问题: 业务除了基本的功能之外,在运行环境中,它也是一种系统,系统还有一种重要的特征就是涌现,什么意思呢?本来平时不是问题的问题现在变成问题了,举一个简单的例子,简单的登录功能,根据用户名和密码在后台进行验证,验证成功就跳转到首页,失败跳到错误页。这个功能太简单不过了,放在普通的业务场景下,这样肯定没有问题,但用在淘宝登录上,你看看,还是之前的操作吗?到这里大家可能就明白了,技术架构一定是解决目前业务上的技术问题,一般而言,技术架构要解决的问题有:高并发、高可用、高性能、高扩展…。
技术方案:针对上面的技术问题,再设计技术方案,这里的方案应该是系统性的方案,绝对不是用一个或者几个中间件就能解决的问题。所以在设计方案时,要找到问题的本质,拿高并发来讲,笔者认为它是有限的资源应对大量的请求,矛盾很明显了,就是有限的资源和大量的请求,如果去解决这个问题呢?从矛盾出发,分别在资源和请求处理上做文章,这样从前端、网络、后端可以设计出一套系统化的方案出来。
技术组件:技术方案中会涉及到使用哪些技术组件,如分布式缓存、消息队列、分布式定时任务、网络通信等,这些都是一个个技术组件,技术方案会根据需要选择一个或多个技术组件来完成目标。单纯的技术组件本身是没有技术价值的,它应该是放在相应的业务场景下才会体现出价值来的。
参考:
https://www.infoq.cn/article/iNbgrQm2liV1EdZeIFyD
https://blog.csdn.net/maoyeqiu/article/details/106062438
https://segmentfault.com/a/1190000016702398
https://www.jianshu.com/p/d8dce27f279f
https://juejin.im/post/5decf93cf265da33d21e6d1d
https://github.com/davideuler/architecture.wechat-tencent