先写了大型网站的架构演化路线,给出相关的架构模式,提出从几个方面关注架构的要素,后面给出了一些案例。这本书的名字,我觉得改成架构最佳实践可能更为合适一点。
之前读过这本书,当时没带着自己的想法,走马观花,没有体会到这本书的妙处。这次带着问题,结合所经历的已有系统的架构模式,与书中所写相互印证,获益良多。
总之,这本书时一本好书,可以买本实体书。
今年看双11晚会,外行看明星,内行看门道,想想一过12点的流量,能抗住这冲击,保证大部分人都能正常下单购物,就感觉ztm牛。再想想之前搞的抽奖活动,就那么点人,怎么就不能分点流量给我们了。
这一步主要还是把数据库服务器独立出去。
本地缓存和分布式缓存,这一步主要还是使用本地缓存的多点,一般不会一下子就用到分布式缓存,当然有些系统会直接使用分布式缓存。将一些配置信息、热点数据缓存本地,降低数据库压力。
引申:缓存穿透、雪崩,缓存失效,一致性hash。
使用负载均衡通过集群减轻应用服务器的访问压力。
引申:会话管理。需要关注session是统一管理还是分配到集群中的某台机器。如果是某台那就可能有会话粘滞,如果随机一台,就可能需要需要会话统一管理。
这一步应该细分下为主备-分离,我们现在的系统就是也只是主从备份,没做分离。现在的系统开发,上面这几步都会一步到位,不会慢慢来了。
引申:分离后数据的一致性。
引申:数据库分布式后,就需要统一的数据访问组件隔离底层,其实在数据库主从后就需要,只是到这一步后需求更迫切。
使用nosql和搜索引擎
搜索功能对于互联网系统尤其电商业务重要性不言而喻。使用nosql做离线分析和日志等,我们之前是利用hbase做订单的二次营销。
业务拆分
不同的业务,不同产品线,然后应用的独立部署。
从系统的新建到后期的数据库的读写分离等过程,业务的拆分应该是一直都存在的,只不过到一定时期后,这个需求更加迫切而已。
引申:系统间,走消息还是rpc等。
引申:分布式调用。
业务驱动了架构技术的发展,而不是技术驱动业务。
逻辑分层,物理上可以集中部署也可以分布式。禁止跨层条用和反向调用。
1. 应用层;
2. 服务层;
3. 数据层。
业务切分。
分层分割是为了更好的分布式。常用的分布式方案:
1. 分布式应用和服务;
2. 分布式静态资源:js、css、图片等资源独立分布式部署,独立域名,动静分离;
3. 分布式数据和存储;
4. 分布式计算;
5. 分布式配置,分布式锁,分布式文件等。
分层、分割、分布式后的不同产品线和应用间的交互,有些业务可以铜鼓异步消息交互,走消息队列异步处理。
数据和应用的冗余。灾备、同城双活,异地多活。
自动化代码管理,自动化测试,自动化部署、监控等等吧。
这个范围太大了,风控、权限、网络攻击等。
性能测试时优化的基础,对于不同人员来说,关注的视角不一样
测试指标
测试方法
浏览器访问优化
反向代理
跟正常代理的区别:正常的是帮你跳出去,反向是帮你跳进来。也可以用来缓存静态资源和热点数据。
优先使用缓存优化性能。合理使用缓存:
1. 频繁修改的数据:2:1;
2. 没有热点的数据;
3. 数据不一致与脏读;
4. 缓存可用性;
5. 缓存的预热:LRU,最近最少使用;
6. 缓存预热;
7. 缓存穿透:将不存在数据也缓存起来;
缓存架构:
1. JBoss Cache的分布式缓存在集群中所有服务器保存相同的缓存;
2. Memcached:缓存集群间不相互通讯,现在比较流行这种。我们用的是redis。
感觉异步操作需要业务的妥协,而且也不是所有业务都适合异步操作。当然有些数据分发或者发个短信、邮件什么的利用消息队列使用异步操作没什么问题。
使用原则就是,任何可以晚点做的事情都应该晚点再做。
集群
代码优化
必须了解jvm。
1. 多线程:感觉能不用就最好不用,用不好都不知道怎么死的,有次用了线程池pc模式处理数据,20W数据最后老是丢几十条,查了好久,才发现,线程不同步,有的线程没有正确关闭;
2. 资源的复用;
3. 垃圾回收;
机械硬盘 vs 固态硬盘
B+树 vs LSM树
RAID vs HDFS
最经常听说的4个9,3个9。
网站不可用时间(故障时间)=故障修复时间点-故障发现(报告)时间点
网站年度可用性指标=(1-网站不可用时间/年度总时间)* 100%
故障定级和故障分。
通过负载均衡进行无状态服务的失效转移
应用服务器集群的session管理
将应用服务器的状态分离,分为有状态的session服务器和无状态的应用服务器。
主要是RPC的服务治理的东西,如果用过RPC的东东,应该都有所了解。
网站伸缩性是指不需要改变网站的软硬件的设计,仅仅通过部署服务器的数量改变来改变处理能力。想想大促前的机器扩容。
不同功能物理分离实现伸缩:主要是分层、分割后的业务和模块独立部署
单一功能通过集群实现伸缩:将单一服务集群部署提供服务
负载均衡技术:
搜索了解下分布式hash算法,的确开阔眼界。
网站架构的扩展性是指扩展系统功能时,对现有系统影响最小,主要还是降低系统应用间的耦合。通过2种方式:分布式消息队列降低耦合、可复用的分布式服务。
感觉mq还是处理非实时业务或者分布数据,其他的实时的调用还是算了吧。
xss脚本攻击:特殊字符转义
sql注入:sql参数绑定
csfr跨站请求伪造:关键环节2次验证
其他攻击:
web应用防火墙;
安全扫描:有一些工具和平台可以做漏洞扫描,最好不要对生产做一些数据清除修改的操作。有次公司的url扫描就改了用户数据,坑爹。
单向散列加密:md5,sha;
对称加密:加解密同一个秘钥,des;
非对称加密:公私钥(私钥加密,公钥解密),RSA;
秘钥管理:作者写的2种方式,没见过,感觉很少这么做,我们公司是申请服务器资源的时候,秘钥同时下发,然后定期更新密码。
前2天刚听的风控讲座,很多内容,例如风险就可以发分为欺诈、商户、法规、结算风险等,可以单独搜索学习。主要是利用规则引擎和统计模型训练。在业务流程中将风控前置,在后期可以利用统计模型,机器学习算法等进行风险预测。
推荐吴军博士的《数学之美》这本书,介绍了好多分类、搜索方面统计模型类应用。