如何构建一个安全, 稳定, 高效的互联网平台体系架构

如何构建一个安全, 稳定, 高效的互联网平台体系架构

 

 

      构建一个比较完善的互联网平台体系架构,广义上可以归纳为:高可用性,高扩展性,高性能,高安全性。

 

 

高可用性

 

       高可用性又可以分为硬件高可用和软件高可用,其最根本的原理就是解决单点问题。

 

 

 

      硬件高可用:服务器、网络设备等都应该避免单点问题

 

  • 服务器电源应该选择双电源,服务器网卡尽量选择双网卡绑定,服务器应预留一定数量的备用机,服务器磁盘配置RAID。

  • 核心网络设备如防火墙,核心层交换机都应做主备冗余。现在主流网络设备都能通过 HSRP 或 VRRP 来做到心跳检测,一旦一台设备出现问题,备机会自动接管当前服务。

  • 数据存储中心的使用:可以有效解决大数据存储及数据冗余完整。

 

 

       软件高可用:软件应用的APP,如WEB,都应去除单点,同时也可解决负载均衡的问题。

 

  • 硬件负载均衡设备如F5

  • 软件负载均衡,软件七层反向代理如现在比较流行的NGINX,四层LVS,HA软件keepalive,heartbeat等

  • 平台负载均衡,引用一些负载均衡的调度平台,如:AWS,阿里云,百度云等

  • 源代码的高可用:应采用版本管理控制系统(如:git)来控制代码的开发及发布,代码有重大BUG可随时回滚,例如某个稳定的特定版本就令起分支来保存。

  • 企业核心的资源来源于数据库,所以数据库必须消除单点,以 MySQL为例,可以做mysql主从复制,一主多从或者双主多从或者是集群。

  • 为了更好的去单点,应该将负载均衡调度器、缓存数据库、文件服务器,都应该进行集群,不过这样的维护量就会大很多。

 

 

 

高扩展性

 

  • 扩展把握关键问题,优先满足关键问题的性能,确定最小功能集。就是先确定好最核心最小的功能集先,并且要保证性能。

  • 在数据建模时,可以考虑不使用外键索引,在数据库性能问题上,不得不分表分库时,这个还是有用。

  • 不适用主键id作为表关联,这也是考虑到以后分表分库的可能性,解决方法外键可以用uuid。

  • 在考虑模块划分的时候,也要考虑到未来2~5年系统的变化情况,可以使用单实例、集群、分布式、分布式 + 集群。

 

也可以参考如下:

http://blog.jobbole.com/86118/

 

 

 

 

高性能

 

  • 合理规划网络架构及网络性能优化。

  • 操作系统优化: 内核优化,文件系统优化等。

  • 改用文件服务器,可以同时提高性能和高可用性,同时也解决了同步和更新问题。

  • 应用程序优化:nginx,tomcat等应用的性能优化。可以用nginx做反向代理和静态文件服务器,也可以用nginx做负载均衡,但是用云平台会更方便简单,而且也有记录流量。

  • 代码优化,经常做review,double check,尽量优化逻辑和循环,减少IO。

  • 数据库优化:读写分离,设计主从数据库,确定数据库的读写比例;选择相应的存储引擎;SQL优化;适当增加索引,提高查询速度;多explain SQL,以达到索引的有效;性能参数优化;横向纵向分表;业务分库。

  • 缓存机制:如CDN缓存静态页面或者图片,memcache,Redis,MongoDB等nosql可用于缓存数据库的热数据。也可选择将热数据缓存到读写速度比较快的SSD硬盘或闪存卡,提升IOPS性能。

  • 页面静态化:应该设计静态服务器,用于访问静态内容,提高性能,可以用nginx。

  • 对于图片较多的网站,也可将图片服务器实行多域名加载

 

 

 

高安全性

 

  • 网络安全:ACL,VLAN,QOS,防攻击,账号安全管理,使用https。

  • 系统安全: iptables; tcpwrapper;账户安全管理;密钥;RSA加密认证;给真正的服务器做反向代理,并且只允许代理服务器的访问,例如给每个server加入nginx做反向代理服务器,server只允许这个nginx访问,以得到隐藏真实server的效果。

  • 应用程序及代码安全:数据加密;加入用户权限管理;session有效性验证;可以加入自己的验证流程。

  • 数据库安全:访问数据库IP权限管理,只允许server访问;账号管理;增删改查权限管理。

代码交流 2021