2:知识结构
网站架构师有很多,有科班出身的,有美术专业的,有生物专业的,有学物理的,有派出所警察出身的,我觉得都是OK的。我也接触到了这些架构师,非常有特点,在很多技术领域有自已专深的。英雄不问出路,好汉不提当年勇。架构师知识背景可以不同,个人看法是不同领域的人作网站架构可以带入很多交叉的思路。就像种树的人再去种花,其实也是可以看到一些共性的总结抽象。
网站架构师需要有编程的经验,从基本的算法,常用的设计模式,多线程开发,远程调用,不同类型数据源使用,这些是面试的时候看得基本功。我认为一个资深的测试专家一定是开发高手,一个架构师必须也是有长期的开发经验,很多性能优化是要从一行行代码优化起的。试想在一个被调用1000万次次每天的页面,一行代码如果每次都走到,每次少运算1ns,也可以节省不少的电力。我为环保作贡献,我骄傲。
网站架构师需要对网络环境有很好的知识理解。架构问题是需要考虑网络部署。比如系统因不可用而发生切换的时候,从一个机房切到另一个机房,要考虑网站的服务对用户访问速度上会有多大影响。这时候的技术方案可能是切DNS,也可能是切前端的跳转机,或是底层部份服务调用到另一个机房。对于这类切换的方案,架构师需要计算网络时间的开销带来的QPS影响,和用户体验上的延迟,每个请求估算需要精确到ms级。如果是全球范围内DNS切换,需要知道DNS刷新的时间经验周期,比如:全球更新在1小时左右,而80%的地区用户会在20分钟内刷新,这样系统带来的业务影响会有多大。
网站架构师需要对网络协议有深入的理解。HTTP协议是最基础的,无论是SESSION还是COOKIE在HTTP协议基础上怎么应用,COOKIE的大小,数量,浏览器是怎么处理HTTP协议的。这些基础有关键时候会影响业务的进行。比如,SAFRI浏览器对第三方COOKIE是禁用的,某功能跨域写COOKIE的时候每次都会重新生成COOKIE,直接导致系统统计用户UV的时候,数量增大,影响各种转化率的计算。HTTP协议还需要考虑本身的连接管理池大小和连接是否KEEPALIVE,这些细节很多时候成为架构上扩展能力的瓶颈。一个静态页面服务的HTTP MAXCLIENT设置 为2500,机器只有10台,很可能在一次中小型活动中连接数到顶,用户部份请求无法满足。
架构师需要考虑数据格式带来的性能影响。很多远程系统调用走的是HTTP协议为基础,数据格式为纯文本或JSON,或XML等,这类调用需要考虑数据的序列化和反序列化,这个工作是CPU开销型的,对性能优化上需要有针对性。QPS高的系统RT一定会短,但RT短的系统不一定比RT高的系统能表现更好的QPS。
架构师需要有很好的数学能力,计算一个QPS里系统从网络请求发出,到网络的IO时间,DB的磁盘读写时间,CPU运算时间,再到数据库连接数,数据分库分表容量规划,都需要有精确的计算。因为容量计算不正确带来问题也是非常多的。比如一台小机上ORACLE的连接数开了2000个,而应用系统由于不断的扩展,小业务系统不断加入,大型促销活动前,临时机器的不断上线,很快就把DB连接数用完,引起业务部份不可用。架构师需要去合理估算每种应用的服务能力,以及他对DB等资源的合理连接数。
加构师对JVM的内存分区及管理策略要有深入的了解,GC的频率可以发现很多系统容量的问题。一个OLD区不断加大的系统,伴随YGC高频发生,加上TCP机器连接数很可能高,可能是要是机器了。一个业务功能不断叠加的系统,很可能PERM区会需要加大设置,否则容易OUT OF MEMORY。
加构师需要精读《数据库系统概念》这类书,对不同DB的索引原理和库表存储结构有了解,我们可以不是ORACLE ACE,但一定要听得懂ACE的DB架构和性能优化方面的建议。并且在原则上,前端用户系统架构上不要出现直连DB的设计,这是亿级PV架构的基础设计保障,特别是一些营销类功能系统,短时并发大的页面不能有DB直连,一些小应用可例外对待。
架构师需要很好的学习能力,技术是不断变化的,昨天用DUBBO,明天可能要换HSF;今天MEMCACHE,明天可能REDIS;今天刚刚把应用拆分,明天可能就要合并。公司外的技术社区还不断有一些好的开源中间件和框架出来,需要不断学习,关注。大网站的架构模式不一定合适小网站,新中间件和框架实施需要考虑运维成本和学习推广成本,架构上要选合适当前阶段的。架构师需要和不同类型的专业人才沟通,所以要能快速理解并学习不同专业的知识去补充自身的知识结构不足。
架构师需要理解业务,在一些业务系统型的网站,业务架构师也显得异常关键,比如像交易型系统,支付型系统。业务架构师需要解决业务层次结构,业务边界划分,业务优先级与技术优先级的平衡。传统软件的系统分析师不知道是否也干这角色?但互联网的业务架构师要求更高,应该是建立在系统架构师的基础上再看高一层,通过业务和技术的综合影响力去帮助网站取得合理的架构,更好得拿到业务结果。
网站架构师的知识结构是宽又深的。