生产动力环境
硬件层
通常来说,目前服务器大多都使用的是本地硬件服务器或者云服务器。本地服务器常见是使用X86架构,目前华为鲲鹏在发展ARM架构服务器。云服务器通常是虚拟服务器,大部分都是基于KVM(QEMU)的。
目前企业很少会使用单种云,大部分都是使用混合云,对于涉密业务或者大量运算的业务则放在本地机房的物理服务器中,对于公网服务就放在公有云服务器。
混合云和多地多中心的机房优势在于:
多地容灾,单计算中心故障有其余中心冗余
服务隔离,涉密服务本地运行,保证数据安全
软件层
管理
计算资源管理
构建CMDB,集中化管理线上和测试计算资源,将服务器信息和网络资源信息进行精细化管理,落实到计算实例上,有效提高资源管理效率。
对于批量运维任务,可以使用Ansible等自动化运维工具做自动化管理。
计算任务管理
将计算任务批量化,使用批量部署工具进行任务提交,多机部署多计算实例,提高计算任务管理效率。
本处可以使用Google提供的Borg或者Kubernetes做计算任务管理。批量提交计算任务后,每个计算实体都是以一个(类)hostname代替。该种方式在Borg中被叫做BNS,即Borg Name Server,将Borg任务解析到指定IP。
存储服务
计算节点应配备本地磁盘,但是该部分磁盘不作为存储盘使用,只保存计算任务产生的临时文件。对于持久化文件可以写入到HDFS等文件存储系统。
网络层
在生产环境中常用到SDN进行网络组网,通过SDN实现负载均衡,并将宽带合理的分配给计算资源,防止因某计算任务发生网络独占,由此可以提高网络方面的成本转化率。
对于文件存储服务或者大文件传输比较多的服务,通常会使用到CDN服务,但是在Google的生产环境中,其使用的是GSLB,即全球负载均衡服务。该种架构即在全球多地部署计算节点(中心),当用户请求服务器时,智能DNS会返回距离用户最近、负载最小的计算节点,由此可以大幅提高用户的访问效果。
其他层
监控服务
构建快速有效的监控系统,尽可能多的收集有效数据(并不是越多越好),在某些大型互联网公司,如果有相关的技术支持和财力支持,完全可以使用监控抓取到的数据进行分析,从而可以进行故障判断,提前规避故障。
研发管理
软件研发必要的两个要素:团队合作和文档输出。
团队合作
尽可能使用代码托管平台,如SVN或者Git。这样有利于团队内代码的代码需求拉通。代码一定要有review机制,开发者禁止直接将代码推入正式分支,所有请求必须提交pr,并由第三人进行代码审计,着重关注pr中的变更。
文档输出
软件研发过程中会输出很多文档,如代码规范、API接口等,这些文档要保证团队内的所有成员随时可编辑,随时可查看。可以使用wiki进行文档托管。