阿里云负载均衡服务器架构 – DNS服务器、正式服务器、MySQL服务器搭建 – 多服务器负载均衡-DNS调度分发

现在很多都会遇到数据量或者用户量的大增情况,首先会对单台服务器做深度优化:

1.Linux系统日志做切割处理、Apache选择多进程模式;
2.添加php加速器 zend optimizer、redis,memcached等等;
3.开启MySQL的log日志,一段时间清除一次
4.配置PHP的FPM(FastCGI 进程管理器),进行多进程处理,高负载支撑。

接着都会想办法实现大并发或者大数据量的处理,那就必须实现服务器架构的大数据量的并发设计了,

以下是本人亲历的负载均衡处理较大的并发服务器架构使用及某些地方的参与实践。

先来张服务器架构设计图:

以上服务器架构是在阿里云平台搭建的,一台DNS调度服务器和三台ECS主机,一台RDS数据库,前端是手机APP。

这样的服务器架构足以支撑百万级用户的,并发可以支撑十万级同时访问,如果RDS数据库达到瓶颈还可以使用(购买)MySQL队列服务。

※如果访问的并发量更大的情况在DNS和CDN中间层加入LVS负载TCP转发,通过TCP四层传输,不通过https的七层传输;如果在数据库遇到的瓶颈的话,可以使用多台RDS数据库和读写分离分开(Master和Salves主从数据库)。

LVS参照:https://baike.baidu.com/item/LVS/17738?fr=aladdin

在做负载之后遇到还是很多问题的,负载如果不做https重定向的话有时会出现http访问方式,导致api出现了无法请求,

服务器繁忙的情况,所以以下总结一些负载遇到的问题,负载均衡服务器问题解决方案:

1.Session同步,以前比较早是使用自己搭建的DFC Session Manager 来同步Session文件,现在是使用阿里云的文件共享磁盘;

2.Upload图片(头像图片、后端上传的数据维护图片等等)同步,使用阿里云的文件共享磁盘;

3.负载均衡多次请求调度同一台的主机,在DNS服务器做算法计算,使同一个来源请求一直请求同一台ECS主机;
  做算法之前出现的问题有(负载均衡会使微信的授权返回来为另一台服务器导致授权失败)

4.负载均衡时微信授权或者SDK分享IP白名单要怎么设置,把所有DNS和主机的IP都在微信的开发者白名单设置上;
  https://segmentfault.com/q/1010000010105546

5.https访问模式,静态文件CSS和JS都被禁止过滤了,服务器nginx过滤的原因,所以要在nginx服务器解除过滤;

6.URL不能写死,一定要使用相对路径或者一定要使用跟访问的https或者http方式一模一样,导致https的Web访问模式不能访问不安全的http;

7.多台服务器负载的代码管理:SVN、GIT代码自动同步到多台服务器,避免每次都是手动上传或者要同时上传多台导致有的上传不完整;

9.负载均衡中的Nginx静态解析的CSS文件路径不能加?和参数,不然Nginx会默认为文件名,导致找不到CSS文件,布局错乱甚至网页无法显示;

10.多台服务器或者负载均衡的文件、图片、log、缓存文件同步方式:阿里云NAS共享文件系统,文件只是映射,不是真的同步到每个目录,但是每个目录都不能删除,
   不然则直接删除共享磁盘的所有文件,这样会导致所有文件都删除。

这些总结的问题都在刚使用负载均衡的时候遇到的比较棘手的问题。

负载均衡搭建起来了,可是如何测试呢,我们内部就推荐了使用Jmeter压力测试,虽然这个家伙不是很好用,

但是听说功能很强大,可以测试百万级的负载压力测试。

※如果不在服务架构考虑负载的话,也可以从编程框架中着手高并发或者TCP长连接的方式,使用的框架有Swoole和GatewayWorker(Workerman)。

参考文章:

http://www.cnblogs.com/cuihongyu3503319/archive/2012/07/09/2583129.html

http://blog.csdn.net/ioy84737634/article/details/44916241

自己在工作上对整个项目过程所经历的系统搭建与优化步骤:

1.系统需求分析,预先规划和评估流量、用户量等;

2.服务器架构搭建:单服务器、负载均衡服务器、分布式集群服务器(主服务器、数据库服务器、图片服务器是否需要分开等);

3.数据库建设:单数据库、高可用数据库(主从、双主、集群【集群又分为及时同步、半同步】)、SQL优化(语句优化、索引优化);

高可用数据库理念可以参考:一文了解数据库高可用容灾方案的设计与实现

4.系统架构搭建:小型框架、大型框架、可扩展(纵向、横向扩展等)、是否需要缓存(如:Redis)、是否需要队列(如:RocketMQ)、是否需要系统搜索索引(如:Elasticsearch)、是否需要静态文件CDN存储、图片文件是否需要分开上传到OSS等;

5.系统规划、笃定方案与开发、开发过程中code的优化、精简及算法合理性、是否需要缓存文件等等。