前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >漫画 | 架构设计中的那些事

漫画 | 架构设计中的那些事

作者头像
码农神说
发布2020-08-05 16:14:25
4860
发布2020-08-05 16:14:25
举报
文章被收录于专栏:码农神说

刚进入架构师角色的时候会有很多迷惑不解的地方,不同于以往做开发,架构师关注点会更上层一些,需要提前识别出问题,并制定解决方案。因此不仅仅需要技术的深度和广度,还有有些行业业务的阅历和经验,才能准确判断和做到有利取舍。优秀的架构师能给团队的主心骨,反之将是绊脚石。

不能是跟风为了纯粹追求技术而做架构,架构是为了解决由于某些复杂度带来的问题的,复杂度来源比如三高:高性能、高可用、高扩展,如果实际中没有这些需求不设计架构反而更有效率。很多创业公司起步的时候一个单体应用搞定全部,单刀直入,求的是快,天下武功唯快不破,而商机一闪即逝!

做架构及做人,需要克服人性的弱点,新手设计架构时都有点好大喜功、追求技术上新潮而不能脚踏实地、化繁为简!恨不得集百家架构之长于一身,设计出世界上最牛逼的架构,殊不知架构的目的就是为了解决实际中的问题,同时还要考虑到投入的性价比,如果没有那么牛逼的业务而强行设计技术上看似很牛逼的架构,这本身就是种浪费和不靠谱。不是身处在阿里、腾讯高复杂度的环境中是无法设计出他们那样的架构的,因为你凭空是想象不到他们遇到那么复杂的问题。

CPU等硬件决定了单机性能的上限,而操作系统决定了其性能的下限,进程和线程模型又影响操作系统性能的主要因素。我们都知道当今流行的操作系统都是分时系统,及时有线程和进程也并不能真正做到并行,只是轮流使用CPU的时间片而已,于是引来了多核CPU诞生。但无论单机性能有多强甚至于大型机,对于现在的互联的需求都很难单兵作战,分布式集群方案应运而生。

集群可以解决性能问题,但它带来的复杂度就是如何分配任务,比如我们熟知的DNS负载、LVS负载、NG的反向代理等都属于任务分配的范畴,当然还有硬件如F5等。他们都实现了任务分配的标准算法如随机、轮询、加权、哈希等等,除了这些算法外,任务本身也可以进行分组处理,比如按CPU密集型型、IO密集型等分类,这样可以让提高性能更有的放矢。当请求量巨大时,任务分配(负载均衡)器也会成为瓶颈,也需要集群,这样复杂度又提升一个量级。

通过CAP理论可知,数据一致性和可用性二者只可满足其一。而数据+逻辑=业务,数据不一致会导致业务表现也不同,因此高可用不仅仅是集群的事情,更多的是数据存储的问题。

在高可用的设计中,是否可用的状态是判断依据的基础,如果判断依据不准确,那么会导致整个的设计是失败的。独裁模式是指所有的节点都向决策者汇报自己的状态,最终是由决策者统一管理状态,有点类似中央集权。选举式就比民主,类似于zookeeper的leader选举,但这种方式容易造成脑裂。而协商式一般用于准备的方式,在大型集群中比较少用。但无论哪种模式都有利弊,需要根据自己特有的环境进行选择。

对待可扩展性需要把握住两点:正确的预测变化和完美封装变化。但在需求多变的情况下,导致预测变化也是件困难的事,不仅仅对业务要通透,最好还能参与售前方案的探讨,这样才能更好地提高前瞻性的能力,还可以适当的引导。而封装变化更多变现为技术侧的技巧,设计模式、面向对象、面向接口、面向组件、面向无服务目的之一都是为了解耦,从而把可变和不可变分开,提高扩展性。

架构设计还会涉及到安全、成本和规模的方方面面,这些相对三高的迫切性相对较弱些,需要在实践中摸索和磨练。

End

版权归@码农神说所有,转载须经授权,翻版必究

转载可联系助手,微信号:codeceo-01

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农神说 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的四七层流量分发服务,访问流量经由 CLB 可以自动分配到多台后端服务器上,扩展系统的服务能力并消除单点故障。轻松应对大流量访问场景。 网关负载均衡(Gateway Load Balancer,GWLB)是运行在网络层的负载均衡。通过 GWLB 可以帮助客户部署、扩展和管理第三方虚拟设备,操作简单,安全性强。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档