此文已由作者肖凡授权网易云社区发布。

欢迎访问网易云社区,了解更多网易技术产品运营经验。

最近Lofter项目碰到很多性能上的问题,特别是数据库相关的,每次推送后,告警就会第一时间到来。这些问题随着产品的不断扩展,我想大家肯定都遇到过。目前我们解决性能问题一般都是两种方法:一是加缓存,减少数据库压力;二嘛,就是加服务器了。如果产品的规模继续迅速增长,我们应该怎么做?靠增加服务器肯定不能解决根本问题,应该从架构上着手考虑。今天整理下web服务端架构从简单到复杂的一个演变过程,为今后Lofter的架构调整积累下经验吧。

第一阶段:web服务器和数据库分离

好吧,我们的产品肯定不在这个阶段。。。这个大家都知道就不多说了,直接上图:

第二阶段:增加缓存

一段时间之后我们发现我们的网站越来越慢,查找原因,发现是数据库的操作太频繁,导致数据连接竞争激烈,所以响应变慢,这个时候自然的会想到使用数据缓存,如redis、memcache等(最近lofter把memcache换成了nkv),减少对数据库的访问。另一方面,web服务器的负载也越来越大,我们需要对静态资源做缓存,可以使用反向代理服务器(通常的使用apache或nginx,lofter使用的是nginx);有时需要对某些特定的请求做缓存,比如lofter投放在网易163首页的iframe,访问量很大,也需要缓存,使用的是varnish。加入了这些缓存之后,架构变成如下:

第三阶段:增加服务器

这个阶段和上个阶段往往是同时进行的。需要注意的几个问题是:1、负载均衡,这个一般使用apache或nginx的负载均衡方案;2、如何保持状态信息的同步,可选的方案有cookie或统一session服务器等;3、如何保持数据缓存信息的同步,一般使用分布式缓存,如前面提到的memcache等

Lofter目前正处于这个阶段。这个阶段完了之后,架构如下图:

第四阶段:数据库分库、分表、读写分离

随着业务的不断增长,最先达到瓶颈的往往都是数据库,这个阶段基本上都是在解决数据库的性能问题。常用的方法就是:

1.先按业务逻辑分库,把不同业务的表放在不同的数据库中,降低数据库压力;

2.分库之后发现数据库的压力又慢慢上去了,往往都是大表造成的,这时候需要对大表进行分表,将大表拆成若干个小表;

3.如果数据库的读写比很高,通常还会考虑读写分离的方案

这个阶段需要注意的问题主要有:分库分表方案、数据如何路由、分布式事务如何处理等,大家可以参考淘宝的解决方案TDDL。这个阶段完了之后的架构图如下:

第五阶段:分布式时代

网易云免费体验馆,0成本体验20+款云产品!

更多网易技术、产品、运营经验分享请点击

相关文章:
【推荐】 对云环境下访问控制系统的思考

最新文章

  1. struts2学习笔记--使用struts2插件实现ajax处理(返回json数据)
  2. sql把一个表数据插入到另一张表
  3. angularjs作用域
  4. DotNetBar v12.1.0.0 Fully Cracked
  5. Data Binding in WPF
  6. 动画 -- ListView列表item逐个出来(从无到有)
  7. 七天学会SALTSTACK自动化运维 (3)
  8. DotNet加密方式解析--散列加密
  9. ECOS-Mongodb安装
  10. centos 源码安装python
  11. qt字符数组转ASCII(十六进制)
  12. 在linux环境下用中文查询数据库
  13. JAVA TestNG单元测试详解
  14. 获取Form表单数据转化成JSON对象
  15. 第一次作业——WorkCount
  16. hive数据导入Sqoop工具
  17. iview的table中点击Icon弹Poptip,render函数的写法
  18. IDEA 创建maven项目
  19. ASP.NET Web API 框架研究 Controller实例的销毁
  20. php 去除数组中指定的值

热门文章

  1. 如何绕过Win8、Win10的systemsetting与注册表校验设置默认浏览器
  2. ubuntu 添加和删除用户
  3. 【Discuz】ucenter通讯失败与Discuz的头像无法显示
  4. 用 centrifugo 搭建 消息推送服务器 docker + rancher 搭建
  5. ViewPagerTransforms
  6. java sleep和wait的区别和联系
  7. 使用TASM编译COFF格式和连接
  8. linux kfifo移植
  9. XMU C语言程序设计实践(5)
  10. Hadoop中序列化与Writable接口