您的位置:首页 > 其它

如何成为一个系统/服务/模块的owner

2015-10-11 23:02 337 查看


(本人表示任重道远,惭愧)

基本技能:
各种应用技术JAVA

、Mysql等;有专攻、有覆盖;
理解计算机工作原理;算法/数据结构;
沟通:态度、理解、表达
工程能力
执行力和自我管理能力

 

个人认为接手一个服务的一般过程:

第一步:理解系统需求的前世今生(这里需要阅读文档,约谈PM,RD等),最终能一个需求过来能判断是不是服务的边界范围之内

第二步:阅读接手的代码,要求能做到能够画出系统的架构图,清楚依赖方

第三步:从小需求开始,以点带面,包括前端后台到数据库,包括代码的提交到最终的部署上线等等

第四步:对服务的未来规划,推广有自己的方案输出,后续能坚持执行等

 

 

要求
内容,或例子

开发



实现
1.理解业务模型

2.工程模块化管理(要必要的话)

3.代码仓库管理

4.文档输出
理解原始需求,判断可行性、代价

比如sinai得业务服务的边界,服务只管信息的聚合,并不着重检索。
业务建模:

完整、准确的把产品需求转换成合理的软件模型。比如sinai分成各个模块,哪些依赖包,真正部署在线上的哪个模块
系统设计、快速实现:

对新的需求评审能力,单独开发能力,能够画出系统的架构图等等
自身管理

代码的模块部署结构,多分支开发、进度控制、代码/资源/对外输出文档管理,对于每个服务应该有自己的文档主页,如sinai的文档给调用放节省了不少RD交流时间
质量



保证
坚持BASE原则,

可用+一致性+分布式

等等。

1.保证功能,3个9还是4个9

2.性能

3.健壮

4.排查问题机制,或是事故处理,或是排查问题处理

5.代码风格
功能:
单元测试,junit的覆盖到多少个接口和函数,百分比控制在多少为达标等等
集成测试:现有的checklist是否可接入使用

性能:
单点响应时间,一个总的思想是:对第三方的处理策略(比如兜底策略+快速失败+多久重试机制+...),防备使用方策略(暴露的粒度是多少),做好自己(降级容错等)。。。sinai这块还需加强。
容量可扩展,是否可以容易做到分布式扩容,比如sinai的thrift模块就可以简单分布式扩容,但job模块就比较麻烦
对服务的容量有清晰认识,上限等等

健壮性
外部依赖容错,常见问题:连接池(连接数、超时等),JVM,机器配置等等
程序回滚、数据恢复:比如怎么快速回滚,怎么快速回复脏数据,可hotfix?可否直接操作db去完成?

代码风格 
关键的地方代码有注释吗?是否需要代码规范?

运维



简捷

 
1.监控

2.报警

3.部署管理

4.数据库的迁移和备份

5.处理事故

 

努力做到,对等机房节点配置相同,发布部署方式统一
监控/报警/排查、解决问题
监控、展示各种业务、技术数据,上下游是否都加监控,JVM,DB,VM的指标是否添加监控
关键数据一定要有报警机制
注重日志,查问题的关键
监控数据、日志、使用各种命令/工具(如JVM的工具)在线检查状态,这3点基本就能发现绝大部分问题原因
虽然线上数据库有专门的dba搞,但是线下环境我们是否能够做到管理和备份
服务是否能找到backup,事故发生时如果自己时间不允许的时候是否有RD替代

注重降低运维成本:

一些琐事:机器申请、磁盘日志清理、自动重启等
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: