- 论坛徽章:
- 4
|
我来开个头:
首先,我建议现在的公司,特别是创业公司,运维介入越早,后期的运维工作越好开展,我们以本活动所描述为例,目前大概有200台服务器,其中已经用到了nginx/redis/mysql/mongodb/hadoop等开源软件,但是由于没有规划,所有混乱放置。
1.我们首先要梳理业务层,假如我们已经梳理完毕,情况如下:
目前的hadoop主要用于离线运算,属于非线上业务使用
目前的开发语言有2种,前端网站用的php,后端api用的是python
目前核心业务主要有2块,前端的web电商及后端的api接口
目前mongodb主要用于搜索功能使用
目前redis主要用于缓存使用
目前数据库使用的是mysql
目前各种应用服务器开发自己部署,上线开发自己控制
2.经过上面的梳理,大概可以了解目前的业务情况和服务器,那么我们需要做的事情主要有下面几点:
将测试环境/离线服务/生产服务分类并进行拆分,严格控制生产环境权限,控制上线操作
将同类开发语言开发的服务合并到同类服务器上,严禁不同开发语言应用混合在同一台服务器上运行
规范应用部署路径/账号/端口号/权限
数据库账号进行梳理,并限制账号连接IP及权限
根据发布流程编写发布脚本,尽量避免开发登录生产环境操作
统计所有业务用途及对应的负责人员及业务的逻辑依赖
搭建监控系统对所有的生产环境业务进行监控并根据业务统计结果分类发送报警
有服务器的情况下,尽快搭建内网DNS系统
3.梳理完业务后就可以针对性的开始本文的主旨,架构设计,我觉的需要主要有下面几点:
严禁在生产环境出现单点问题系统(可以使用集群/HA方式消除)
对核心业务使用集群方式增加业务处理能力(nginx的upstream/haproxy/lvs等)
架构必须是可扩展的,实在没法扩展的,在架构设计的过程中必须考虑后期的可拆分性(比如使用域名方式)
最后,我觉的常见的web的3层结构是相对比较通用的做法:
第一层,使用代理层(缓存层),主要看业务特点,一般可以使用haproxy|lvs这一类的软件,7层建议使用lvs,7层建议使用haproxy
第二层, 使用nginx做应用中间层,比如:nginx+php-fpm
第三层,中间件层,在大规模的数据访问中,一般将接口及一些公用的功能抽离出来,做成中间件层,比如:有很多大的公司数据库访问也使用中间件调用,应用不直接连接数据库操作数据,再比如:消息中间件(kafka/activemq等)
最后就是数据库层。
另外,在实际生产环境中更复杂一些,可能会引入cache层,比如:redis/memcached
这里只是抛砖引玉,欢迎大家探讨!
|
|