在线百万用户量下的系统架构

题记
    本文是从PPT中整理而来,细节问题没有描述的太清楚,有问题可以直接与我联系,或者是以后会整理出相对比较完善的文档.


一.要解决的问题和方案的选择.
   
一般而言,我们希望达到的目标是这样的:
  
引用
一个高并发的系统
    一个稳定的系统
    一个高扩展性的架构
    一个简洁的方案


关于最后一点,从前端到后端解决并发/稳定/扩展可能有很多种方案.从机器的硬件性能到数据库的扩展设计等等都会有自己的方案,这里给出的是一个我们认为相对简洁高效的SCA方案.


二.关于Sql的使用限制

引用
绝对不允许出现跨表的查询

DB的设计更大程度上取决于缓存的设计

防止穿透缓存直接到达DB的访问

将业务逻辑放到代码中实现,不要忘了DB的主要作用毕竟是存储



DB不是用来解决并发问题的,并发靠缓存.所以针对DB的查询都应该是精简的,尽可能的可以被缓存的数据.

怎么样能保证缓存使用的最大化呢?

1.每一个查询只缓存ID.
2.根据ID取对象单独缓存.


维护缓存中的数据也是一件比较麻烦的事情.如果维护缓存的代价太大,不如直接使用失效策略.
这也要看具体的业务场景.




三.服务

这里介绍的是使用Apache Tuscany提供的SCA的解决方案.简单的来说.我们是将一个个复杂的系统拆解成可以独立布署的服务,每一个服务提供的功能都是可以做平滑的扩展的.

有关服务的一些要点如下:

引用
没有业务逻辑的基础服务

包含业务逻辑的复杂服务

独立折分和部署

数据读写部分只交给服务处理

尽量减少服务之间的相互依赖

Controll负责服务之间的调度




这样从前到后分别是:WEB层,Service层,DB层.
WEB层是Controll层,负责解析用户的请求,调用不同的Service,并返回结果给用户.WEB层可以通过布署多台WEB来实现.
Service层负责处理业务逻辑和对数据操作的封装,Service是有多个的,不同的业务划分为不同的Service,同一种类型的Service依照负载情况可以布署多台.
DB层负责数据的持久化,大数据量使用分库.




四.工具


引用
尽可能多的做设计

尽可能少的写实现

尽可能多的测试

尽可能多的分析



用到的开源软件列表:
1.Mysql 数据库
2.DAL是对数据读写的封装,包括对于缓存的处理.
3.Tuscany 实现SCA的功能.
4.Scallop.对Tuscany的扩展,实现Tuscany的负载均衡.
5.Memcache 缓存.
6.Qpid JMS系统
7.DemoCode 代码生成工具




 





  
   


猜你喜欢

转载自gemantic.iteye.com/blog/1786521