时不待我 天道酬勤

没有多少时间可以虚度了....

导航

自从上回参加培训以后,负载均衡的想法一直在脑子里面挂着。以前的公司和天涯网络社区有业务合作,曾经和他们的技术总监进行过交流,他介绍过天涯的架构,记忆中最深的一句话是,“设计之初就要自问:随着数据规模增加和流量增长能否通过增加新服务器(DB/WEB)解决性能问题”。近期和德哥都在进行一些尝试,形成了下面这样可实现并且低成本的架构图。给各位老大看看缺陷和可提升的地方在哪里,因为我接触这块的信息不多,可使用的方案也就缺乏,让各位老大提一些意见来完善它。

 


WEB层面:

 

1, 采用Nginx WEB服务器的负载均衡控制,为了避免 Nginx 代理服务器的崩溃造成的WEB服务器无法访问,并提高它的可靠性。需要再增加另一台 Nginx 服务器,它们之间用NLB来做群集。这样子我在添加新的WEB服务器时,只需要在Nginx代理服务器中添加它的IP地址即可。(已经验证)

2, WEB 服务器之间采用 cwRsync 软件进行文件同步。(未验证)

3, WEB 服务器采用 MemCached 来进行 SESSION 共享。(已经验证)

4, WEB 服务器共用一台文件服务器做为图片和附件的保存,用户先通过WEB服务器上传,再通过FTP传输到文件服务器,文件服务器通过HTTP发布出来(访问时校验)。(已经验证)

 

SQL SERVERDB层面:

 

1, Write数据库服务器提供发布功能,多个Read数据库服务器进行订阅,达到数据共享的目的。(已经验证)

2, Write数据库需要主从备份,然后提供出发布。(没实现,因为复制服务器需要提供出机器名,这样子提供出的机器名是哪台?能自动切换?)

3, 如果Write数据库经过长时间的积累,数据量庞大。那么我增加一个Read服务器时,需要重新订阅,这样子的效率会很慢。怎么办?这是很大的问题,不解决就达不到添加服务器就能增加性能的目的。

 

1, 通过一个配置文件来加载数据库服务器,格式如下:

  <DbSnapInfoList>

    <DbSnapInfo>

      <!-- 数据库源编号 -->

      <SouceID>1</SouceID>

      <!-- 是否启用 -->

      <Enable>true</Enable>

      <!-- 数据库连接 -->

      <DbconnectString>Data Source=LIJINGFAN;User ID=sa;Password=123456;Initial Catalog=NetFrameWork2;Pooling=true</DbconnectString>

      <!-- 负载权重 -->

      <Weight>4</Weight>

      <!-- 是否写服务器 -->

      <IsWrite>true</IsWrite>

    </DbSnapInfo>

    <DbSnapInfo>

      <SouceID>2</SouceID>

      <Enable>true</Enable>

      <DbconnectString>Data Source=HPWANGMEIDE1;User ID=sa;Password=123456;Initial Catalog=NetFrameWork2;Pooling=true</DbconnectString>

      <Weight>3</Weight>

      <IsWrite>false</IsWrite>

    </DbSnapInfo>

  </DbSnapInfoList>

 

2, 根据SQL语句获取数据源,如果是SELECT语句就根据权重值获取Read的数据源,其它的就使用Write的数据源。这里面需要更详细的考虑,包括存储过程和视图查询或者变更等等。

3, 采用 权重算法 来推荐数据源。这儿可能服务器的性能和负载不一样,可能通过调整权重来分配查询的压力。

4, 还有没有??