摘要:
1. 需求 产品第一版:用户有用户名、密码、昵称等三个属性,对应表设计: user(uid, name, passwd, nick) 第二版,产品经理增加了年龄,性别两个属性,表结构可能要变成: user(uid, name, passwd, nick, age, sex) 假设数据量和并发量比较大 阅读全文
摘要:
1. 什么是高可用 高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。 假设系统一直能够提供服务,我们说系统的可用性是100%。 如果系统每运行100个单位时间,会有1个单位时间无法提供服务,我们说系统的可用性是 阅读全文
摘要:
1. 什么是负载均衡? 负载均衡(Load Balance)是分布式系统架构设计中必须考虑的因素之一,它通常是指,将请求/数据均匀分摊到多个操作单元上执行。负载均衡的关键在于均匀。 常见互联网分布式架构如上,分为客户端层,反向代理nginx层,站点层,服务层,数据层。可以看出,每一个下游都要多个上游 阅读全文
摘要:
1. 缘起 单点master的设计会大大简化系统设计,何况有时候避免不了单点。 先看一个典型互联网高可用架构: (1)客户端层:是浏览器或App,第一步先访问DNS-server,由域名拿到nginx的外网IP; (2)负载均衡层:nginx是整个服务端的入口,负责反向代理与负责均衡工作; (3)站 阅读全文
摘要:
1. 缘起 容量评估是架构师必备的技能之一,场景的容量评估包括数据量、并发量、带宽、CPU/MEM/DISK等。 文章以并发量为例。 2. 步骤 2.1 如何知道总访问量? 答案:询问业务方,询问运营,询问产品,对运营活动或产品上线后的预期是什么? 比如:xx要做一个App-Push的运营活动,计划 阅读全文
摘要:
1. 下载openresty-1.13.6.1.tar.gz和openssl-1.0.2l.tar.gz,并解压 下载对应的软件版本,创建openresty_http2安装路径 2. 安装openresty openresty默认是不支持HTTP2,需要在安装时指定安装HTTP2模块,同时HTTP2 阅读全文
摘要:
1. 背景 很多时候,业务有定时任务或定时超时的需求,当任务量很大时,可能需要维护大量的timer,或者进行低效的扫描。 例如:对每个用户会维护一个APP到服务器的TCP连接,用来实时收发信息,对这个TCP连接,如果连续30s没有请求包,服务端就要将这个连接断开。 一般说怎么实现这类需求呢? 2. 阅读全文
摘要:
系统唯一ID是设计一个系统的时候常常会遇到的问题,也常常为这个问题而纠结。 生成ID的方法有很多,适应不同的场景、需求以及性能要求。所以有些比较复杂的系统会有多个ID生成的策略。 0. 分布式ID要求 (1)全局唯一性:不能出现重复的ID号,既然是唯一标识,这是最基本的要求; (2)粗略有序:如果在 阅读全文
摘要:
1. 背景 目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的CAP理论:任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(partition Tolerance),最多只能同时满 阅读全文
摘要:
1. 概述 在部分商用虚拟机(Sun HotSpot、IBM J9)中,案卷程序最初是通过解释器进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为“热点代码”(Hot Spot Code)。为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与本地平台相关 阅读全文
摘要:
1. 概述 Java编译器可能是指一个前端编译器(其实叫“编译器的前端”更准备一些),把*.java文件转变成*.class文件的过程;也可能是指虚拟机的后端运行期编译器(JIT编译器,Just In Time Compiler)把字节码转变成机器码的过程;还可能是指使用静态提前编译器(AOT编译器 阅读全文
摘要:
1. 简介 Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码)以及跟随其后的零至多个代表此操作所需参数(称为操作数)而构成。 由于Java虚拟机采用面向操作数栈而不是寄存器的架构,所以大多数的指令都不包含操作数,只有一个操作码。 Java虚拟机操作码的长度为一个字节(即 阅读全文
摘要:
1. Linux 1.1 tar.gz解压缩 解压:tar xzvf flight-8.1.0.0417.tar.gz 压缩:tar czvf lbs-8.1.0.0417.tar.gz lbs/ 1.2 find查找文件 find / -name httpd.conf 1.3 查看端口占用 net 阅读全文
摘要:
1. 下载包安装Openresty openresty-1.13.6.1下载地址 https://openresty.org/download/openresty-1.13.6.1.tar.gz 安装请自行百度。 2. 配置 2.1 nginx.conf 2.2 upload.lua(文件位于con 阅读全文
摘要:
0. 说明 这种方式其实复杂,麻烦!建议通过这个方式搭建Openresty文件上传和下载服务器:http://www.cnblogs.com/lujiango/p/9056680.html 1. 包下载 openresty-1.13.6.1下载地址 https://openresty.org/dow 阅读全文
摘要:
1. 概述 来自对官方G1垃圾收集器的日志解释分析,官方地址:https://blogs.oracle.com/poonam/understanding-g1-gc-logs或https://blog.csdn.net/zhanggang807/article/details/46011341 2. 阅读全文
摘要:
1. 概述 G1(Garbage First)垃圾收集器是当今垃圾回收技术最前沿的成果之一。早在JDK7就已加入JVM的收集器大家庭中,成为HotSpot重点发展的垃圾回收技术。同优秀的CMS垃圾回收器一样,G1也是关注最小时延的垃圾回收器。 G1最大的特点是引入分区的思路,弱化了分代的概念,合理利 阅读全文
摘要:
1. jmap 1.1 概述 JVM Memory Map命令用于生成heap dump文件,如果不使用这个命令,还可以使用-XX:+HeapDumpOnOutOfMemoryError参数来让虚拟机出现OOM的时候自动生成dump文件。 jmap不仅能生成dump文件,还可以查询finalize执 阅读全文
摘要:
1. 背景 想要一探JDK内部的实现机制,最便捷的路径之一就是自己编译一套JDK。 2. 获取JDK源码 从http://openjdk.java.net/下载源码,如 openjdk-6-src-b27-26_oct_2012.tar.gz 解压之后的目录结构: 3. 编译环境 3.1 系统环境 阅读全文
摘要:
1. 概述 提供一种简单的方法来定位CPU高的问题。 2. 步骤 2.0 模拟CPU占用的例子 直接编译运行,CPU就会有大约50%的占用。 2.1 找到占用CPU高的进程 执行top命令,找到CPU高的进程232543 2.2 执行top -H -p pid,找到占用CPU最高的线程号232544 阅读全文