Home | 简体中文 | 繁体中文 | 杂文 | Github | 知乎专栏 | 51CTO学院 | CSDN程序员研修院 | OSChina 博客 | 腾讯云社区 | 阿里云栖社区 | Facebook | Linkedin | Youtube | 打赏(Donations) | About
知乎专栏多维度架构

Netkiller Architect 手札

《Netkiller Architect 手札》视频教程(2023版)

Mr. Neo Chan, 陈景峯(BG7NYT)



中国广东省深圳市望海路半岛城邦三期
518067
+86 13113668890


电子书最近一次更新于 2023-08-04 08:01:03

版权声明

转载请与作者联系,转载时请务必标明文章原始出处和作者信息及本声明。

http://www.netkiller.cn
http://netkiller.github.io
http://netkiller.sourceforge.net
微信公众号: netkiller
微信:13113668890 请注明“读者”
QQ:13721218 请注明“读者”
QQ群:128659835 请注明“读者”
知乎专栏 | 多维度架构

本电子书采用碎片化写作方式,所以没有截止时间,写作也很随意,内容不断填充,更新,章节不断扩展和调整。每年的年底我会推出 epub, Kindle mobi 等格式的电子书。


致读者

Netkiller 系列手札 已经被 Github 收录,并备份保存在北极地下250米深的代码库中,备份会保留1000年。

Preserving open source software for future generations

The world is powered by open source software. It is a hidden cornerstone of modern civilization, and the shared heritage of all humanity.

The GitHub Arctic Code Vault is a data repository preserved in the Arctic World Archive (AWA), a very-long-term archival facility 250 meters deep in the permafrost of an Arctic mountain.

We are collaborating with the Bodleian Library in Oxford, the Bibliotheca Alexandrina in Egypt, and Stanford Libraries in California to store copies of 17,000 of GitHub’s most popular and most-depended-upon projects—open source’s “greatest hits”—in their archives, in museum-quality cases, to preserve them for future generations.

https://archiveprogram.github.com/arctic-vault/

目录

1. 自述
1.1. 写给读者
1.2. 作者简介
1.3. 如何获得文档
1.4. 打赏(Donations)
1.5. 联系方式
1. 什么是多维度架构
1.1. 架构与格局
1.2. 架构师的大局观
1.3. 运维的三重境界
2. 多维度架构设计
2.1. 多维度架构之网站HTML
2.1.1. 网站的历史演变
2.1.2. 集群(Cluster)
2.1.3. 缓存技术
2.1.4. 网站静态内容出版
2.1.5. 多媒体数据分离
2.1.6. 图片尺寸优化与自动裁剪
2.1.7. 压缩数据传输
2.1.8. SSL
2.1.9. 搜索引擎相关优化
2.1.10. 静态网站繁简转换
2.2. 多维度架构之网络延迟
2.2.1. 中国的大网络环境
2.2.2. 架构设计需要考虑网络延迟
2.2.3. 总结
2.3. 多维度架构之超时时间
2.3.1. 无处不在的超时时间
2.3.2. 流量漏斗
2.3.3. 微服务的超时时间
2.3.4. 容器技术的超时时间
2.3.5. 最后总结
2.4. 多维度架构之会话数
2.4.1. 路由器和防火墙的会话数
2.4.2. 负载均衡设备的会话数
2.4.3. 服务器的会话数
2.4.4. 应用程序的会话数
2.5. 多维度架构之日志
2.5.1. 一次切割日志引发的血案
2.5.2. 日志归档与数据挖掘
2.5.3. 日志中心规划
2.6. 多维度架构之监控
2.6.1. 背景
2.6.2. 概述
2.6.3. 怎样监控
2.6.4. 总结
2.7. 多维度架构之分库分表
2.7.1. 切分策略
2.7.2. 常规操作
2.7.3. 分表需要从业务角度考虑
2.7.4. 最后总结
2.8. 分布式计划任务
2.8.1. 什么是分布式计划任务
2.8.2. 为什么采用分布式计划任务
2.8.3. 何时使用分布式计划任务
2.8.4. 分布式计划任务的部署
2.8.5. 谁来写分布式计划任务
2.8.6. 怎么实现分布式计划任务
2.8.7. 每隔0.5秒执行一次
2.9. 多维度架构之安全
2.9.1. 植入式攻击入侵检测解决方案
2.9.2. Shell 历史记录异地留痕审计与监控
2.9.3. 延伸阅读
2.10. Shell 高级编程
2.10.1. 递归调用
2.10.2. 实现守护进程
2.10.3. 进程间通信
2.11. DevOps实施中你可能遇到的问题
2.11.1. 什么是DevOps?
2.11.2. 为什么会诞生DevOps?
2.11.3. DevOps 虽好,为什么难以普及呢?
2.11.4. 软件工程的历史与进化
2.11.5. 为什么很多企业为什么实施 DevOps 以失败告终?
2.11.6. CI 持续集成不是DevOps
2.11.7. CD 持续交付不是 DevOps
2.11.8. 自动化部署
2.11.9. 收集各部门问题
2.11.10. 收缩技术栈
2.11.11. 被遗忘的数据库
2.11.12. 建立中心仓库
2.11.13. 缓存
2.11.14. 安全
2.12. Kubernetes & Docker 实施中你会遇到的问题
2.12.1. 真的需要容器吗?
2.12.2. 镜像会遇到的问题
2.12.3. 容器会遇到的问题
2.12.4. 运维会遇到的问题
2.12.5. 人员的问题
2.12.6. 当 kubernetes 遇上微服务
2.12.7. 最后总结
2.13. 多维度架构之微服务
2.13.1. 微服务安全吗?
2.13.2. 熔断器解决了什么问题?
2.13.3. 微服务的性能
2.13.4. 多维度架构之微服务拆分
2.13.5. 接口安全
2.14. 多维度架构之远程异地灾备
2.14.1. 背景
2.14.2. 灾备整体解决方案
2.14.3. 数据中心网络
2.14.4. 服务器部署
2.14.5. 软件开发
2.14.6. 自动化运维
2.14.7. 灾备培训和演练
2.14.8. FAQ
2.15. 多维度架构之应用防火墙
2.15.1. 什么是应用防火墙
2.15.2. 功能需求
2.15.3. 简单实现
2.16. 数据库与应用程序间通信
2.16.1. 管道通信
2.16.2. 消息队列
2.16.3. 数据库与外界文件
2.16.4. Socket 方式
2.17. 多维度架构之消息队列
2.17.1. 你是怎样使用消息队列的?
2.17.2. 你是否真正理解了消息队列?
2.17.3. 使用的合理吗?
2.17.4. 是否有必要使用消息队列?
2.17.5. 最后总结
2.18. 多维度架构之Socket连接数
2.18.1. 理解服务器端与客户端
2.18.2. 影响连接的因素有哪些?
2.18.3. 程序怎么写?
2.19. 多维度架构之压力测试
2.19.1. 自动化测试如何破局?
2.19.2. 打破软件自动化测试的格局
2.19.3. 压力测试中存在的问题
2.19.4. 协议测试
2.20. 多维度架构设计之灰度测试方案
2.20.1. 什么是灰度测试?
2.20.2. 解决方案
2.20.3. 工作原理
2.20.4. 管理接口
2.20.5. 使用 Redis 做持久化
2.21. 多维度架构设计之线程池
2.21.1. 并行控制(同步阻塞)
2.21.2. 并行控制(异步非阻塞)
2.21.3. 数据共享
2.21.4. 线程池监控
2.21.5. 线程监控
2.21.6. 线程管理
2.21.7. 线程管理代码
I. 云计算
3. 阿里云
3.1. ECS
3.1.1. Rocky Linux 镜像
3.1.2. 阿里云 AlmaLinux 9.2 镜像初始化
3.1.3. CentOS 8.4 初始化
3.1.4. 阿里云 Ubuntu 16.04.7 LTS 镜像 cron.daily 不执行 BUG 排除过程
3.1.5. /etc/fstab 优化
3.1.6. 云盘扩容
3.1.7. dnf 安装 python3.11
3.1.8. IPv6
3.2. RDS MySQL
3.2.1. RDS MySQL => 本地 MySQL 数据库
3.2.2. 换表升级
3.2.3. 导出 CSV 文件
3.3. 日志服务
3.3.1. SLB 日志
3.3.2. Kubernetes 日志
3.3.3. Aliyun LOG Java Producer
3.4. 压力测试与瓶颈分析方案
3.4.1. 压力测试方案
3.4.2. 瓶颈分析与优化方案
3.4.3. 常用瓶颈分析和系统指标监控命令
3.4.4. 性能指标
3.5. 堡垒机
3.5.1. 数据库查询需求解决方案
3.5.2. 解决方案
3.5.3. 方案实施
3.6. 阿里云 Kubernetes
3.6.1. pod 反复异常重启怎么排查
4. 数据库设计
4.1. 数据库设计于使用规范
4.1.1. 建表规范
4.1.2. 查询规范
4.2. 关系型数据库设计
4.2.1. 数据字典
4.2.2. 用户帐号表
4.2.3. 分类表设计
4.2.4. 文章表设计
4.2.5. 评论表
4.2.6. 记录点击率,阅读次数,及评分表
4.2.7. 产品属性表
4.2.8. 商品库存表
4.2.9. 国际化语言表
4.2.10. Workflow
4.2.11. 内容版本控制
4.2.12. logging 日志表的设计
4.2.13. uuid 替代传统序列 id
4.2.14. 动态配置表
4.2.15. 验证码
4.2.16. 手机归属地数据库表
4.2.17. 数据检查
4.2.18. 创建与修改时间
4.2.19. 在线用户表
4.2.20. HTML TO Text
4.2.21. SNS 数据库设计
4.2.22. TINYINT(1) 还是 ENUM( 'true' , 'false')
4.2.23. PostgreSQL 所特有数据库设计
4.2.24. Sharding
4.2.25. MySQL 大数据操作注意事项
4.3. 数据库与缓存
4.3.1. 什么是数据库缓存?
4.3.2. 为什么缓存数据呢?
4.3.3. 什么时候使用数据库缓存
4.3.4. 涉及缓存的地方有哪些
4.3.5. 谁来控制数据库缓存
4.3.6. 怎么控制数据库缓存
4.4. 数据库并行访问控制
4.4.1. 防止并行显示
4.5. 数据库安全
4.5.1. 数据库结构版本控制
4.5.2. 保护表
4.5.3. 保护表字段
4.5.4. 时间一致性
4.5.5. 为数据安全而分库
4.5.6. 内容版本控制,撰改留痕
4.5.7. 数据库审计表
4.5.8. 用户/角色认证
4.5.9. Token 认证
4.5.10. 数据加密
4.5.11. 开发加密插件开发
4.5.12. 数据区块链
4.5.13. 状态保护
4.5.14. 数据归档
4.6. 参考例子
4.6.1. CMS 数据库设计
4.6.2. 微信公众平台
4.6.3. 电子商务网站
4.6.4. 数据属性例子
4.7. NoSQL OOD(Object-Oriented Design)
4.7.1. MongoDB
4.7.2. Cassandra
4.8. Spring Data 最佳实践
4.8.1. MySQL
4.8.2. MongoDB
II. 运维篇
5. IDC
5.1. 网络设备配置管理与版本控制
5.1.1. 背景
5.1.2. 怎样实现网络设备配置管理
5.1.3. 总结
5.2. 机房迁移
5.2.1. 拓扑确立
5.2.2. 存储规划
5.2.3. 设备上架
5.2.4. 操作系统初始化
5.2.5. 服务器及运行环境
5.2.6. 部署应用程序
5.2.7. 监控系统
5.2.8. 日志中心
5.2.9. 测试
5.3. 网线怎样连接才合理
5.3.1. 单个硬件防火墙方案
5.3.2. 双防火墙方案
5.3.3. 网卡
5.4. 记录思科路由器/防火墙/交换机日志
5.4.1. 开启日志
5.4.2. syslogd 服务器脚本
5.5. 影响网络流量的因素
5.5.1. 带宽
5.5.2. 会话数
5.5.3. IO
6. Server
6.1. Linux 系统安全与优化配置
6.1.1. Openssh 安全配置
6.1.2. Shell 安全
6.1.3. 防火墙
6.1.4. Linux 系统资源调配
6.1.5. PAM 插件认证加固配置
6.2. PHP 安全与性能优化
6.2.1. Apache mod_php
6.2.2. php.ini
6.2.3. php-fpm
6.2.4. 开发于安全
6.2.5. 执行效率
6.2.6. 服务器版本信息
6.3. Tomcat 安全配置与性能优化
6.3.1. JVM
6.3.2. Tomcat 优化
6.3.3. Tomcat 安全配置
6.3.4. 如何部署应用程序
6.3.5. 延伸阅读
6.4. Spring cloud 安全部署与性能优化
6.4.1. 环境安装
6.4.2. 操作系统配置与优化
6.4.3. Java 虚拟机
6.4.4. 配置 Spring boot
6.4.5. Spring Cloud 配置
6.4.6. 配置 Nginx
6.4.7. 部署应用程序
6.4.8. 持续集成
6.4.9. 监控
6.4.10. 容器部署
6.5. 环境安装模板化
6.5.1. 云主机初始化
6.5.2. CentOS 7 初始化
6.5.3. Nginx
6.5.4. Tomcat
6.5.5. Node.js
6.5.6. MongoDB
6.6. 时间同步
6.7. 邮件系统
6.7.1. Mailing List
6.8. 磁盘规划
6.8.1. 物理隔离
6.8.2. 硬件逻辑卷隔离
6.9. Distributed File System(簇文件系统)
6.9.1. FC 光纤存储
6.9.2. 聚合文件系统
6.9.3. 全局文件系统
6.9.4. 负载均衡文件系统
6.9.5. 网络块设备
6.9.6. Storage 存储
6.9.7. 磁盘快照
6.10. iDRAC / iLO / IMM
7. Backup
7.1. help
7.1.1. Task
7.1.2. Schedule
7.1.3. Crontab
7.2. 配置文件备份
7.2.1. Firewall and Switch
7.2.2. Server
8. DIY Firewall & VPN
8.1. Firewall
8.2. 3 Layer VPN
8.3. 7 Layer VPN
8.4. 替代 CentOS 7/8 中的 firewalld
8.4.1. Demo
8.4.2. Firewall Script
III. Software architecture (软件架构)
9. 前端架构
9.1. Javascript Framework
10. Project
10.1. 开源模式
10.2. 开发语言及平台
10.2.1. 分层架构
10.2.2. Web 2.0
10.2.3. 云计算
10.2.4. 跨平台
10.2.5. 编译语言比脚本语言安全
10.2.6. 封装重用
10.2.7. 相关的工具
11. Framework Design
11.1. Architecture Overview
11.2. CDN (Content Delivery Network)
11.3. 微服务
11.4. 开发框架 Framework
11.4.1. HMVC
11.4.2. REST
11.4.3. SNA (Shared Nothing Architecture)
11.4.4. 其他
11.5. MVC Framework Design (设计MVC框架)
11.5.1. HMVC Framework
11.6. REST
11.6.1. RESTful JSON API
11.6.2. Ajax 与 RESTful 跨域
11.7. Service-oriented architecture (SOA)
11.7.1. SOAP实现
11.7.2. MQ 实现
11.8. Dispatcher MVC核心分发器
11.8.1. URL设计
11.8.2. Dispatcher 的实现方式
11.9. Plugin & Hook 设计与实现
11.9.1. 插件管理平台
11.9.2. 接口定义
11.9.3. 插件
11.9.4. 测试
11.10. Interface
11.10.1. 访问接口协议
11.10.2. 接口性能问题
11.10.3. 接口安全问题
11.11. 模板(template)
11.11.1. HTML 页面优化
11.12. Session/Cookie
11.12.1. Session
11.12.2. Session 共享
11.12.3. Cookie
11.13. 国际化 Locale database。
11.13.1. Unicode
11.14. 数据库访问
11.14.1. CRUD
11.14.2. Active Record
11.14.3. OR Mapping
11.15. Cache
11.15.1. 页面缓存
11.15.2. 局部缓存
11.16. Single sign-on (SSO) 单点登录
11.17. 搜索引擎
11.18. Synchronous/Asynchronous
11.19. Message Queuing
11.20. Hash
11.21. Sharding 垂直/水平切割
11.21.1. 面向服务
11.21.2. 面向数据库
11.22. 日志系统
11.23. Cache
11.23.1. CDN/逆向代理缓存
11.23.2. Cache 生存时间
11.24. i18n 国际化
11.24.1. 数组方式
11.24.2. 数据库方式
11.24.3. 文件文件
11.24.4. Gettext
11.24.5. 数据结构
11.25. RSS / ATom
11.25.1. Atom
11.26. Logging 日志
11.26.1. 日志
11.26.2. 日志的格式
11.26.3. 日志存贮
11.26.4. Log4cpp/Log4j/Log2PHP
11.26.5. Remote Syslog
11.27. debug
11.28. 性能优化
11.28.1. 尽量使用单引号
11.29. 监控
11.30. Design pattern (设计模式)
11.30.1. Singleton 单件模式
11.31. AOP(Aspect Oriented Programming)
11.32. 信息安全
11.32.1. CSRF(Cross-site request forgery)跨站请求伪造
11.32.2. Session 撰改演示
11.32.3. 用户注册与登录安全
11.32.4. 目录文件与权限
11.32.5. 密码安全
11.32.6. 注入检查
11.32.7. 防止恶意刷新与重复提交
11.32.8. 屏蔽出错信息
11.33. 序列化
1. 附录
术语表

插图清单

2.1. 分时方案
2.2. HA 高可用方案
2.3. 多路心跳方案
2.4. 任务抢占方案
2.5. 任务轮循或任务轮循+抢占排队方案
2.6. 单机房高可用双活互备解决方案
2.7. 双机房异地灾备方案
2.8. 三机房互备异地灾备方案
2.9. 动态页面方案
2.10. 数据源灾备解决方案
2.11. 数据库灾备解决方案
2.12. 双向通知解决方案
2.13. 消息对列解决方案
2.14. CVS开发框架
2.15. 传统的分表方案
2.16. 推荐的分表方案
2.17. 基于功能分表方案

表格清单

4.1. 工作流模拟

范例清单

2.1. example robots.txt
2.2. 发送短信
2.3. 处理图片
2.4. 身份证号码校验
2.5. 静态化案例
2.6. 数据同步案例
3.1. 开启交换分区
3.2. nmon
4.1. identity_card 身份证归属地表
4.2. 递归查询实例 city 表
4.3. 话题讨论表的设计
4.4. 演示 SQL_CACHE
4.5. 演示 SQL_NO_CACHE
4.6. 演示 query_cache_type=off 关闭查询缓存
6.1. /etc/pam.d/sshd - pam_tally2.so
6.2. /etc/pam.d/sshd - pam_listfile.so
6.3. /etc/pam.d/sshd - pam_tally2.so
6.4. /etc/pam.d/sshd - pam_listfile.so
7.1. Backup program
11.1. php language package
11.2. sql table language package
11.3. Example for ECSHOP
修订历史
修订 1.0.0Jun 29, 2020Neo
计划改变,启动写作计划
修订 0.1.1Sep 12, 2011Neo
章节做了大调整,将文档分为五块,多维度架构,开发,运维,SQA,还有DevOps。
修订 0.1.0May 15, 2010Neo
增加解决方案一节,并填充了大量章节。同时对完成这篇文档信心大增
修订 0.0.42010Neo
这篇文档几乎没有时间和精力编辑,内容增加不多。
修订 0.0.4April 15, 2009Neo
这篇文档几乎搁浅,没有时间和精力,没有编辑加入。今天做了一下布局调整,增加一些内容。
修订 0.0.3Sep. 17, 2008Neo
加入关于存储的内容
修订 0.0.1May 24, 2008Neo
李振韬加入编译团队
修订 0.0.0May 22, 2008Neo
这是一个值得纪念的日子