关于互联网架构设计的心得与体会
2016-06-20 11:07
615 查看
首先需要声明一个观点:好的架构应该是随着公司业务的发展逐步逐步进化出来的!尤其是针对互联网初创公司,受限于人力,物力,财力,大部分都是将功能放入一个项目,以便于快速上线。然而,随着业务的发展,功能越来越多,服务压力越来越大,都需要对系统的进行重构,以满足业务的发展。
再来说说什么是好的架构,好的架构应该是在资源,需求,性能,可用性,维护性或扩展性中找到一个平衡点。如果在资源充足,需求明确的情况下怎么来设计我们的架构?可以从三个方面来思考:
1.性能
随着业务的发展,用户量越来越大。那就要求我们的系统具有横向扩展的能力,也就是要求我们的系统必须是无状态的。这只是基础条件,接下来最重要的是你要知道你的系统的瓶颈在哪里,可以设置一些监控点,看看哪里耗时最多,然后有针对性的去优化。
考虑性能需要懂得分流!
2.可用性
可用性上可以理解为冗余+自动化+报警
首先我们没办法保证每个服务都是稳定可靠的,因为总有宕机的时候,一般我们在部署服务时最少俩台,这是其一。其二,如果服务中一台宕机,其他服务能不能抗的住,如果抗不住需要再冗余一台。再一个就是自动化,,避免不必要的人工干预。最后一个就是报警,主要是针对系统出现问题时,尤其是需要人工及时干预时。
3.可维护性(扩展性)
尽量保证系统内的功能是高内聚的。早期我们做项目大多数都是所有功能都在一个项目中,很多人都在维护,结果导致冲突大大提高,同时也不利于扩展。我见过一个项目光启动就要十几到二十分钟。所以可以将系统中相关性不是很大的功能,或公用的功能独立出去,形成服务,同时保证服务是可以横向扩展的。一个大的系统变成几个小的系统,维护小的系统肯定比大的系统要方便一些,当然得有个度,如果小系统太多也会增加它的维护成本。另外小系统之间也要尽量减少环形依赖。
说了系统之间的,再说说系统内部,每个系统也要有清晰的分层结构,每层都有自己的职责,层与层之间需要清晰的调用关系。然后再说说代码层面,设计模式,设计原则都是必须要考虑的问题。
再来说说什么是好的架构,好的架构应该是在资源,需求,性能,可用性,维护性或扩展性中找到一个平衡点。如果在资源充足,需求明确的情况下怎么来设计我们的架构?可以从三个方面来思考:
1.性能
随着业务的发展,用户量越来越大。那就要求我们的系统具有横向扩展的能力,也就是要求我们的系统必须是无状态的。这只是基础条件,接下来最重要的是你要知道你的系统的瓶颈在哪里,可以设置一些监控点,看看哪里耗时最多,然后有针对性的去优化。
考虑性能需要懂得分流!
2.可用性
可用性上可以理解为冗余+自动化+报警
首先我们没办法保证每个服务都是稳定可靠的,因为总有宕机的时候,一般我们在部署服务时最少俩台,这是其一。其二,如果服务中一台宕机,其他服务能不能抗的住,如果抗不住需要再冗余一台。再一个就是自动化,,避免不必要的人工干预。最后一个就是报警,主要是针对系统出现问题时,尤其是需要人工及时干预时。
3.可维护性(扩展性)
尽量保证系统内的功能是高内聚的。早期我们做项目大多数都是所有功能都在一个项目中,很多人都在维护,结果导致冲突大大提高,同时也不利于扩展。我见过一个项目光启动就要十几到二十分钟。所以可以将系统中相关性不是很大的功能,或公用的功能独立出去,形成服务,同时保证服务是可以横向扩展的。一个大的系统变成几个小的系统,维护小的系统肯定比大的系统要方便一些,当然得有个度,如果小系统太多也会增加它的维护成本。另外小系统之间也要尽量减少环形依赖。
说了系统之间的,再说说系统内部,每个系统也要有清晰的分层结构,每层都有自己的职责,层与层之间需要清晰的调用关系。然后再说说代码层面,设计模式,设计原则都是必须要考虑的问题。
相关文章推荐
- 以“不变应万变”,我们需要怎么做?
- 关于架构师的那些事儿
- 如何进行软件架构设计?
- 高可用可伸缩架构实用经验谈
- 一个开源系统的架构分析
- 我被中国计算机教育的现实打败了
- 开发流程
- 使用.net Remoting技术构建应用系统架构系列(1)
- 面向服务架构(SOA)的原则
- 从此落户-开篇
- 2011数据库技术大会总结
- 设计模式理解
- 软核,硬核、固核的区别!(整理总结)
- VS2010串口通讯架构设计初探
- Discuz!NT数据访问层分析
- 从节能角度看数据中心软硬件设计(一)
- [从架构到设计]第一回:设计,应该多一点
- 过程
- 架构师能力模型解析(转载)
- [读]4. Communication is King; Clarity and Leadership its humble servants