微服务思想
康威定律
-
- 定律一:组织沟通方式会通过系统设计表达出来,就是说架构的布局和组织结构会有相似。
- 定律二:时间再多一件事情也不可能做的完美,但总有时间做完一件事情。一口气吃不成胖子,先搞定能搞定的。
- 定律三:线型系统和线型组织架构间有潜在的异质同态特性。种瓜得瓜,做独立自治的子系统减少沟通成本。
- 定律四:大的系统组织总是比小系统更倾向于分解。合久必分,分而治之。
运维 & 统计 & 技术支持
常规监控
-
- 监控的方式:主动、被动、旁路(比如舆情监控)
- 监控类型: 基础监控、服务端监控、客户端监控、
监控、用户端监控 - 监控的目标:全、块、准
- 核心指标:请求量、成功率、耗时
-
- Zabbix、Nagios、Ganglia、Zenoss、Open-falcon、监控宝、 360网站服务监控、阿里云监控、百度云观测、小蜜蜂网站监测等。
命令行监控工具
-
- top、sar、tsar、nload
APM
APM — Application Performance Management
-
主要开源软件,按字母排序
-
- 主要基于 Google的Dapper(大规模分布式系统的跟踪系统) 思想。
统计分析
-
- 常用指标:访问与访客、停留时长、跳出率、退出率、转化率、参与度
-
- 第三方统计:友盟、百度移动、魔方、App Annie、talking data、神策数据等。
-
- 所谓无痕、即通过可视化工具配置采集节点,在前端自动解析配置并上报埋点数据,而非硬编码。
持续集成(CI/CD)
Jenkins
环境分离
开发、测试、生成环境分离。
自动化运维
Ansible
puppet
chef
测试
TDD 理论
-
《深度解读 - TDD(测试驱动开发)》
- 基于测试用例编码功能代码,XP(Extreme Programming)的核心实践.
- 好处:一次关注一个点,降低思维负担;迎接需求变化或改善代码的设计;提前澄清需求;快速反馈;
单元测试
- 《Java单元测试之JUnit篇》
-
《JUnit 4 与 TestNG 对比》
- TestNG 覆盖 JUnit 功能,适用于更复杂的场景。
-
《单元测试主要的测试功能点》
- 模块接口测试、局部数据结构测试、路径测试 、错误处理测试、边界条件测试 。
压力测试
全链路压测
A/B 、灰度、蓝绿测试
虚拟化
KVM
Xen
OpenVZ
容器技术
Docker
云技术
OpenStack
DevOps
文档管理
- Confluence-收费文档管理系统
- GitLab?
- Wiki
中间件
Web Server
Nginx
-
- Nginx 通过异步非阻塞的事件处理机制实现高并发。Apache 每个请求独占一个线程,非常消耗系统资源。
- 事件驱动适合于IO密集型服务(Nginx),多进程或线程适合于CPU密集型服务(Apache),所以Nginx适合做反向代理,而非web服务器使用。
-
- nginx只适合静态和反向代理,不适合处理动态请求。
OpenResty
- 官方网站
-
《浅谈 OpenResty》
- 通过 Lua 模块可以在Nginx上进行开发。
Apache Httpd
Tomcat
架构原理
-
《JBoss vs. Tomcat: Choosing A Java Application Server》
- Tomcat 是轻量级的 Serverlet 容器,没有实现全部 JEE 特性(比如持久化和事务处理),但可以通过其他组件代替,比如Srping。
- Jboss 实现全部了JEE特性,软件开源免费、文档收费。
调优方案
-
- 启动NIO模式(或者APR);调整线程池;禁用AJP连接器(Nginx+tomcat的架构,不需要AJP);
-
- AJP 协议(8009端口)用于降低和前端Server(如Apache,而且需要支持AJP协议)的连接数(前端),通过长连接提高性能。
- 并发高时,AJP协议优于HTTP协议。
Jetty
- 《Jetty 的工作原理以及与 Tomcat 的比较》
-
《jetty和tomcat优势比较》
- 架构比较:Jetty的架构比Tomcat的更为简单。
- 性能比较:Jetty和Tomcat性能方面差异不大,Jetty默认采用NIO结束在处理I/O请求上更占优势,Tomcat默认采用BIO处理I/O请求,Tomcat适合处理少数非常繁忙的链接,处理静态资源时性能较差。
- 其他方面:Jetty的应用更加快速,修改简单,对新的Servlet规范的支持较好;Tomcat 对JEE和Servlet 支持更加全面。
缓存
本地缓存
-
- 堆内、堆外、磁盘三级缓存。
- 可按照缓存空间容量进行设置。
- 按照时间、次数等过期策略。
-
- 简单轻量、无堆外、磁盘缓存。
客户端缓存
-
- 主要是利用 Cache-Control 参数。
服务端缓存
Memcached
-
- 采用多路复用技术提高并发性。
- slab分配算法: memcached给Slab分配内存空间,默认是1MB。分配给Slab之后 把slab的切分成大小相同的chunk,Chunk是用于缓存记录的内存空间,Chunk 的大小默认按照1.25倍的速度递增。好处是不会频繁申请内存,提高IO效率,坏处是会有一定的内存浪费。
-
《memcache 中 add 、 set 、replace 的区别》
- 区别在于当key存在还是不存在时,返回值是true和false的。
Redis
-
- 使用 ziplist 存储链表,ziplist是一种压缩链表,它的好处是更能节省内存空间,因为它所存储的内容都是在连续的内存区域当中的。
- 使用 skiplist(跳跃表)来存储有序集合对象、查找上先从高Level查起、时间复杂度和红黑树相当,实现容易,无锁、并发性好。
-
- RDB方式:定期备份快照,常用于灾难恢复。优点:通过fork出的进程进行备份,不影响主进程、RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快。缺点:会丢数据。
- AOF方式:保存操作日志方式。优点:恢复时数据丢失少,缺点:文件大,回复慢。
- 也可以两者结合使用。
网友评论