【基础架构】架构师的职责

经常有人问,架构师是干嘛的?那么今天谈谈,架构师的职责是什么。

什么是架构

谈架构师职责之前,我们要先了解什么是架构。那么提到架构,很多人也会提到框架这个概念,多数情况下,我们都不怎么区分这两个概念,如果细分一下的话,架构偏向于结构,框架偏向于规范。比如linux中有架构,window有架构,微信有架构,淘宝也有架构…那么框架呢,比如一款mvvm框架,mvc框架,使用这个框架需要遵循一些规定好的设计。

我们这里主要说一下架构吧,以微信为例,一款app,它其实是分很多模块的,比如好友模块,朋友圈模块,消息模块等,而朋友圈模块又分为留言模块,点赞模块,发表模块等。架构就是说,这些不同的模块如何的各司其职,又能如何的互相配合,如果要增加一个摇一摇模块,如何能够扩展方便。把这些所有因素都考虑进来,最后能够组装在一起的能力,就是架构能力,整个系统的所有组成统一叫做架构。感觉还是有点绕。。。不管了,我觉得能够解决业务痛点,使得业务能够做到高性能、高可用、易扩展、成本低、安全高…,说白了就是能解决掉业务排在前面一半的痛点,就是牛逼的架构师。

为什么需要架构

大家有没有发现,一般小公司没有架构师这个职位,只有达到一定量级才会有架构师,因为小公司不需要架构,10个人开个会碰一碰,你做这个,我做这个,撸起袖子写代码,尽快上线,比花时间搞架构有意义。你以为淘宝一开始就搞的这么牛吗?不是的,淘宝第一版是买的!当年杭州马在2003年的时候,4月7号决定要做淘宝,要求5月10号上线,要是你想着搞架构,黄花菜都凉了,基于当时公司、市场情况,只要买一个是最快的,当然要考虑买一个什么样的,买一个轻量的还是买个复杂的,各有优势,但是基于后续可能要持续发展,就买了个轻量的,方便后续二次开发。等到了后续,业务大爆发,当前项目承载不了那么高的流量,才开始搞架构。所以,好的架构都是业务逼出来的。如果架构脱离业务,那没有太大的意义。

回到主题,我们为什么需要架构,我理解的架构就是为了解决复杂业务中遇到的问题。

架构要做什么

我们上面也说到了,当业务发展一定程度时,由于市场需求、公司老板要求等,必须要对业务进行优化,可能因为旧结构会有一些问题,比如难扩张,加一个新需求,依赖的东西太多,人员成本大,也可以是用户量急剧上升,需要承载更高的qps等,那么架构要做的,我这里整理了几个方面:高性能、高可用、可扩展、低成本、高安全,当然还有很多,但多数的复杂业务都会遇到这几个问题。

高性能

之前做过一个bff框架,支持公司内部服务,当时一台8核32G服务器,裸压hello world,记得qps最高压到了2500。记得当时公司有个活动,预计当天参与人数会到20万,qps峰值保险一点就是20w了,那么如何让这个qps只能到2500的框架支持这么多的用户量呢?最简单的办法也是最合适的,用机器的数量来提升qps的上限,一台机器可以承载2500的qps,那就操作20w/2500多台机器,当然由于目前虚拟化技术等实现,可能很多机器是虚拟机,所有,真实的服务器也可能不需要那么多。这就是一个简单的用量来提升性能的方式。

当然,高性能,也会体现在其他方面,比如一些调度算法、负载均衡等,都是提升高性能的方式,好的调度算法,也能减少一些资源都浪费。

高可用

我们还以我做的那个bff框架为例,说白了,业务方用了你的框架,上线后,发现程序经常崩溃,排查原因还非常困难,日志难找。这就说明,你这个架构设计的有问题。那么如何做到高可用呢,首先作为一个架构师,妳得有一定都预测性,可能会出现什么情况,如果出了什么情况你有什么备选方案,可以让业务还能够稳定运行,不被用户察觉的情况下,业务不受影响。记得之前出现过一个案例,线上服务有时候会经常莫名重启,后来经排查发现,在一个异步操作里,抛了一个异常,但是这个异常没有被catch到,导致进程直接退出了,退出后,由于机器上有保活机制,进程又被拉起来了,这就出现了服务重启的情况。最后我做了一个兜底的方案,在进程中监听了uncaughtException事件,防止异常退出。

另外很多情况需要我们考虑,比如线上服务重启,有一段短暂的事件,请求是打不进来的,那如何解决这段时间的服务不可用对用户的影响呢,那就可以做到平滑重启,多个进程配合就可以做到,这些都是需要架构师要想的,再比如,有一些服务是链接ElasticSearch(后面简称es)的,一般es都是部署到公司特定的机器上,如果某个时刻es挂了,你的服务就会受到影响,这个也是你需要考虑的,如果es挂了,你得有降级方案,比如可以熔断,数据拿备机数据。

总之,高可用就是要尽可能的想到所有线上可能遇到的各种问题,你想,阿里双11前,都要突然断电,就是为了验证服务的高可用。

可扩展

这个大家应该也容易理解,服务的升级和迭代,有时候是需要在某一些能力做扩展的,还以bff框架为例,多数通用的中间间,我们一般都内置到框架里了,但是有些业务,需要自定义中间件,那就需要框架本身暴露出一个口子,用来用户的自定义扩展。如果一个bff框架没有可扩展功能,给你用的话,我估计你也不想用。所以可扩展也是一个用户体验到问题。再往大一点产品讲,大家都在用微信,如果微信哪天在朋友圈做一个新功能,比如要做广告,总不能把朋友圈整体都要搞一下把,这个成本也太大了。另外大家在微信的设置里,可以看到有一个发现页的设置,里面可以动态关闭展示你喜欢的功能,这就是可扩展性。

其他

其他还有很多因素需要架构师考虑,反正架构师的职责就是为了业务的高效、稳定、安全等考虑,脱离业务的架构师,不是好架构师。