架构师职责

以前对于架构师这个职位定位比较模糊,一直在探索怎样从一个普通程序员成为一个能力与沟通卓越的架构师,现在我就阐述一下我现在对架构师这个职位的肤浅看法。

       最近网上有大量的网上培训机构推出成为架构师的课程,我也听了许多,听过他们的直播课程之后,感觉还是有水平的,这帮人都是一线开发出来的,只因为不想在为kpi和过度开发工作而活着,也想多赚点钱,所以出来做教育。唠叨一句,现在java培训已经是红海了,没有基础的小伙伴进来的门槛比较高了。回到原题,这些网上推出的架构师视频,我认为是java初中级到高级至资深程序员做准备,而不是架构师,因为各个技术点只要你有毅力,早晚也会学会,分析一个框架,一天分析5行代码,它迟早也会被你分析完。技术的提升不代表你解决问题的速度就加快,有一部分是业务问题,另一部分是在一线编码时总结出来的经验,识别该系统哪些技术点是需要资源去攻坚的。 比如设计一个类似于oceanbase这样的分布式数据库,该数据库具有oltp和olap的特征,这是需要你不断的学习加总结与具体的业务实际向结合,才能开始设计。下面列一下架构师的职责(同时也鼓励我自己向这方面前进),注明一下出处-《大规模分布式存储系统:原理解析与架构实战》。

架构师的工作不仅在于整体架构设计,还需要考虑清楚关键实现细节,做到即使只有自己一人也可以把系统做出来,只是需要花费更多的时间而已。

架构师的主要工作包括:

1)权衡架构,从多种设计方案中选择一种与当前团队能力最为匹配的方案。架构设计的难点在于权衡,架构师需要能够在理解业务和业界其他方案的前提下提出通合自已公司的架构。这样的架构既能很好地满足业务需求,复杂度也在开发团队的掌控范围之内。另外,制定系统技术发展略线图,提前做好规划。

2)模块划分、接口设计、代码规范制定。系统如何分层,模块如何划分以及每个模块的职责,模块的接口、客户端接口,这些问题都应该在设计阶段考虑消楚。而不是遗留到编码阶段。另外,确保整个团队的编码风格一致。

3)思考清楚关键实现细节并写入设计文档。架构师需要在设计阶段和团队成员讨论清楚关键数据结构、算法,并将这些内容文档化。如果架构师都不清楚关键实现细节,那么,团队成员往往更不清楚,最终的结果就是实现的系统带有不确定性。如果分布式存储系统存在多处缺陷,那么.系统集成测试或者试运行的时候一定会出现进程Core Dump、数据不正确等问题。这些问题在分布式以及多线程环境下非常难以定位。如果引发这些错误的原因比较低级,团队成员将无法从解决错误的过程中收获成就感,团队士气下降,甚至形成恶性循环。

4)提前预知团队成员的问题并给予指导。划分模块以及安排工作时需要考虑团队成员的能力,给每个成员安排适当超出其当前能力的任务,并给予指导,例如,帮助其完善设计方案,建议其参考业界的某个方案等。

总而言之,每个问题总会有多种技术方案,架构师要有能力在整体上从稳定性、性能及工程复杂度明确一种设计方案,面且思考清楚实现细节,切忌模棱两可。分布式存储系统的挑战不在于存储理论,而在于如何做出稳定运行且能够逐步进化的系统。
下面举个案例来说明架构师的职责。
在一个互联网公司(假定是b2b业务)中,该公司高层要求出准实时的财务报表和销售情况,但是现在业务流水没有太大数据量,但是金额比较高,所以有分析价值。架构师考虑到现在公司的情况,认为公司还不具备上大数据平台的资源,如果上了带来了大量的资源浪费。那么现在应该怎么做呢?可以使用redis的zset和set来准实时处理数据,毕竟redis在缓存与响应具有很高的性能。设计思路如下:起一个死循环单线程不断的从数据库读取数据,每5s一次读取当天的数据,每天凌晨1点读取一个月的数据,读取出来的数据通过java程序处理数据,处理完成的统计值放入redis,java程序做统计值时,以统计一天的数据为标准。这样方便统计日至月季年的数据。

你可能感兴趣的:(架构师职责)