如何定位一款成功的产品
周颢把微信的成功归结于腾讯式的“三位一体”策略:产品精准、项目敏捷、技术支撑。
敏捷是一种态度 敏捷就是试错。一个团队在更短的时间内尝试了更多机会(并能改进过来),就能有(更多的)机会胜出。海量系统上的敏捷 无异于悬崖边的跳舞。一个海量系统,有千万级用户同时在线,在一个单独的功能上每天有百亿级的访问,同时还要保证99.95%的可用性。在海量系统上应对项目开发会有很严谨的规范,都说要尽可能少的变化,因为90%-95%的错误都是在变更中产生的,如果系统一直不变更会获得非常高的稳定度。如何做到这一切?周颢认为,首先,必须建立起一种狂热的技术信念,就是一定是可以做到的。然后,需要用一些稳固的技术(理念)来支撑,例如:大系统小做、让一切可扩展、必须有基础组件、轻松上线(灰度、灰度、再灰度;精细监控;迅速响应)...等等来支撑。
产品设计四大法器:大系统小做、让一切可扩展、必须有基础组件、轻松上线
- 大系统小做:当设计庞大系统的时候,应该尽量分割成更小的颗粒,使得项目之间的影响是最小的。但仅仅把模块变得更为清晰,这在海量系统设计开发中是不够的,还需要在物理环境上进行分离部署,出现问题的时候可以快速发现,并且在最快的情况下解决掉。
- 一切可扩展:在高稳定度、高性能的系统中间,为了稳定性能把它设计成不变化的系统,但为了支持敏捷需要让一切的东西都要变得可以扩展。主要包含网络协议可扩展(可以通过XML描述,再通过工具自动生成所有的代码)、数据存储可扩展(采用KV或者TLV的方式)。
- 必须建立基础组件:要解决复杂问题的时候,需要将已有的经验固化下来,固化下来的东西会成为系统中的一部分。
在微信后台会有几种不同的基础组件。大致包括:
Svrkit——Client/Server自动代码生成框架:10分钟搭建内部服务器LogicServer——逻辑容器:随时添加新逻辑OssAgent——监控/统计框架:所见即所得的监控报表存储组件——屏蔽容灾/扩容等复杂问题
4.轻松上线:当做了变化并把它从开发环境中部署到现有的运营环境中去,在这个过程中,“灰度”这个词非常关键,就是在黑和白之间的选择,必须要变成一种小规模尝试,再逐步扩展到海量过程中的一个问题。灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式
微信架构参考:
- 协议。手机终端跟后台服务器之间的交互协议,这个协议的设计是整个系统的骨架,在这一点做好设计可以使得系统的复杂度大大降低。
- 容灾。当系统出现了若干服务器或若干支架(宕机的时候),仍然需要让系统尽可能的提供正常的服务。
- 轻重。如何在系统架构中分布功能,在哪一个点实现哪一个功能,代表系统中间的功能配置。
- 监控。为系统提供一个智能仪表盘。