web架构总结

web架构总结

读-写
高并发请求-海量数据
缓存、降级、限流

常用架构图
Alt text

Alt text

架构文章

各大互联网公司架构演进之路汇总

网络

并发数、数据量

  • HTTP重定向
    最简单的方式,手写php代码

  • 反向代理负载均衡
    nginx

  • IP负载均衡 lvs

  • DNS负载均衡
    cdn

  • 带宽要够用,网络稳定

  • 安全问题

    • 防刷
    • 防DDOS
    • 防盗链

Linux

系统

  • 配置

进程打开的文件数, TCP并发连接数,内存分配
构建C1000K的服务器-1
构建C1000K的服务器-2

  • 安全检查

私钥、端口、防火墙、【意识】
服务器被黑给我上了一课
工程师追查线上问题(或运维)常用的shell命令

nginx

可以结合lua做些高级功能: 缓存、限流、过滤、监控等
使用Nginx+Lua开发高性能Web应用

限流

秒杀, 评论, 下单

聊聊高并发系统限流特技-1
聊聊高并发系统限流特技-2

  1. 常见限流原理
  • 限制总并发数(比如数据库连接池、线程池)、
  • 限制瞬时并发数(如nginx的limit_conn模块,用来限制瞬时并发连接数)、
  • 限制时间窗口内的平均速率(如Guava的RateLimiter、nginx的limit_req模块,限制每秒的平均速率)、
  • 限制远程接口调用速率、限制MQ的消费速率、
  • 另外还可以根据网络连接数、网络流量、CPU或内存负载等来限流。
  1. 限流算法
  • 令牌桶
  • 像摇号,利用令牌+队列,令牌push 速率固定,pop任意
  • 漏桶
  • 像滴水,利用队列,push 任意,pop速率固定
  • 计数器
  • 数据库连接池、线程池、秒杀的并发数;只要全局总请求数或者一定时间段的总请求数设定的阀值则进行限流,是简单粗暴的总数量限流,而不是平均速率限流。
  1. 应用级限流
  • QPS阀值,过载保护,各类软件都有限制连接数的配置
  • 数据库连接、线程
  • 热点接口
  1. 分布式限流
  • 原子性,redis+lua / nginx+lua
  1. 接入层限流
  • Nginx 最大连接数,IP限制

降级

高并发系统的降级特技

  • 页面全显 ->部分

  • 实时->准实时,同步->异步,DB->cache

  • 异常错误功能->关闭

  • 容错机制

  • 服务连接失败

  • 简单重试

  • 主从互试

  • 动态机器列表,检查机器状态

  • 延迟

  • 服务超时时间设置 – 不同子服务不同超时设置

  • 自服务异步

  • 先返回成功,服务自己在后端尝试

Code

需求分析文档

整理思路,谋定后动,避免边写代码边思考的过程式开发;避免丢项。

  1. 分析
    > 预期目标、当前实现、旧有影响
    新需求的目的、意义是什么;
    先从用户角度理解,再从工程师角度理解;
    分析可实现性;
    对已有业务影响,旧数据影响;
    划分业务功能,画出流程图。

  2. 开发思路
    > 设计功能模块、列出功能点、设计数据表、任务分配

  3. 测试方案
    > 流程测试、功能测试、异常测试、受影响的旧有功能测试

编写代码

测试

  • 编写测试脚本,覆盖全部接口、核心功能、反复出bug的功能,更改数据表的测试要再次查询出数据对比是否正确,不能简单的看返回值

code review

根据实际开发情况选择以下内容:

  • 业务
    开发文档,需求分析是否清晰易懂

  • 代码

    • 使用phabricator review功能;
    • 架构问题,功能分配,模块封装;
    • 代码可读性,可维护性;
    • 注释易懂;
    • 安全性
      • api参数,正确的类型,min,max,url编码、trim、 emoji表情导出的问题, 有error 错误提示
        • 使用了第三方接口,调用失败是否try catch, 请求外部接口 严格要求记录debug日志
        • 纯SQL 是否有未过滤的变量
        • 如表前加密字段(手机号,姓名,证件号,银行卡号,密码等这些敏感字段都需要声明加密)。
  • 数据表
    mysql编码规范、旧数据影响、是否需要回滚方案(不删除、不修改旧字段旧表)

  • 测试
    测试方案有没有问题

  • 性能
    有没有性能问题

上线

walle-web
有整套DevOps当然最好(持续集成、持续交付、持续部署)。

  1. 数据库同步,确认数据回滚方案(不删除字段,不修改字段,只新增,记录废弃字段,上线一段时间后确认没问题再处理)
  2. 代码同步
  3. 执行脚本

Cache

客户端 – 服务器
硬盘 – 内存
文件、memcache、redis、mongodb、kafka

memcache

算法、扩容、复制、预热、集群

  • 一致性hash的概念,解决了什么问题

  • 存储机制
    涉及到page,slab,chunk三个概念

    1. page为内存分配的最小单位,默认是1M,可以通过 -I参数在启动时指定。
    2. slab获得一个page后,划分成一组chunk。
    3. Chunk才是存放缓存数据的单位,chunk块的大小可以为64B,128B,256B…1024KB。
  • 命中率是什么鬼

    1. 分配策略:
    • 如果可以存储这个数据的最佳的chunk大小为128b,那么memcached会把刚申请的slab以128b为单位进行分割成8192块. 之后凡是接近128b大小的数据都可以存到这里(比如80b,如果没有80~128b之间的chunk,就存到128b里);
    • 当这页slab的所有chunk都被用完时,并且继续有数据需要存储在128b的chunk里面时,如果已经申请的内存小于最大可申请内存10MB 时,memcached继续去申请1M内存,继续以128b为单位进行分割再进行存储;
    • 如果已经无法继续申请内存,那么mamcached会先根据LRU 算法把队列里面最久没有被使用到的chunk进行释放后,再将该chunk用于存储。
  1. 提高memcached的命中率:
    • 预估我们的value大小并且适当的调整内存页slab大小和增长因子是必须的。
    • 增大大内存
    • 二级缓存
  • 内存分配

一个Memcache进程设置内存不要太多也不要太少,一般3G,一台服务器按端口分多个memcached,memcache进程实际占用内存要大于设定的内存,所以系统要给每个memcached预留大于3G。

  • 查看状态: telnet 127.0.0.1:11211,stats
  • 热点
  • 单点
  • 运维软件
    [twemproxy,codis,magent,replica,memadmin]

redis

Redis实战:类微博的亿级社交平台

消息队列-kafka

kafka技术分享系列(目录索引)

sphinx

DB-mysql

  • 常见问题
    分库分表常见策略
    主从,读写分离,互备,单点
    数据同步问题 (预防错误,错误修复)
    MySQL自带多线程同步
    自己实现解析binlog,多线程写入

    keepalived + MHA
    zookeeper
    mysql transfer 多线程同步工具
    MariaDB
    amoeba
    Xtrabackup

监控

  • 手工检查

awk,sed,grep,cut,uniq,sort,tr,wc,head,tail

[工程师追查线上问题(或运维)常用的shell命令](http://ww111.iteye.com/blog/2176313)
  • 日志系统

系统日志、程序日志、安全日志

- ELK
	[ELK实战一:架构的选择](http://www.elain.org/2016/02/15/ELK实战一:架构的选择/?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io)
	[ELK+redis搭建nginx日志分析平台](http://yanliu.org/2015/08/19/ELK-redis搭建nginx日志分析平台/)
	[ELK+kafka构建日志收集系统](http://lx.wxqrcode.com/index.php/post/101.html?utm_source=tuicool&utm_medium=referral)
- rsyslog
	[日志收集利器rsyslog](http://www.elain.org/2016/04/26/ELK实战二:日志收集利器rsyslog/)
  • 服务器集群
    • Zabbix
    • 第三方
      监控宝、

测试【Todo】

  • 自动化测试
  • 压力测试
    wrk – HTTP协议高性能压力测试工具
  • 业务容错
  • 人的失误-录入机器检查

数据分析【Todo】

ELK
Hadoop

其他

重构过程中的过度设计


业务【Todo】

U
用户
登录
权限

G
评论
关注
中文检索

C
12306
双十一

秒杀活动
	
	
	
Web系统大规模并发:电商秒杀与抢购
静态页面 秒杀请求 请求数据包小 流量过载保护(集群负载达到峰值,拒绝请求)

交易
支付
风控

技术职位

程序猿、工程狮、架构狮、技术经理、技术总监、CTO的区别

互联网未来发展趋势【Todo】

整个人类处于互联网发展的哪个阶段?下一个十年,互联网升级的大致方向在哪里?

web 1.0 是信息的高效传递,但应用面积大多扔处于单向的,点对点的方式。

web2.0

web3.0

发表评论

电子邮件地址不会被公开。 必填项已用*标注