不知道什么时候记得一些笔记,现在翻出来看看还是很有启发。也不想整理了,格式有点乱不过反映了当时的一些思考。
好的架构时演进出来的而不是从石头缝里蹦出来的,需要我们在工作中不断的思考、总结、实践。。。
1. 有关架构师的思考,从模块间的耦合关系上考虑
A,健康状况大致为多少线程、db每port写入量为多少,多少server,带宽占用,请求频率;
B,如果峰值情况怎样?
C,如前端cache丢失或当机怎样?
D,如系统在压力下出现异常问题,可先对整体构架进行分析,然后再考虑测试。
E, Keep it Simple and Stupid
一个构架师的经验主要在于经历了多少场景,即解决了特定场景下的要求的经验
以及试错过程中积累的经验和对各种主流技术的掌握
1,任何模块,避免只有remote cache,没有local cache的状况;即使remote cache一次只提供一条含有100条20 byte的信息,峰值加载1000次,这对互联网来说是很小的压力,但带宽占用也2M。这对带宽来说也是不必要的压力;
1,查询remote cache需计算带宽量,以考虑什么的内容必须放入local cache;这里local cache就是JVM内部的hashmap
这就是所谓“嵌入式”缓存。而一般memcached通常作为“分布式”缓存。
this is =--------
2. 容量及带宽规划
容量规划
MySQL: < 硬盘大小
Memcached: < RAM
Redis: < RAM
带宽规划
由于Redis比MySQL快10倍以上,因此带宽也是需要事先规划,避免带宽跑满而出现瓶颈。
---------
1,如果有前端分配的server,那么这个server必须只做分配&转发请求,不和后端有任何业务交往,否则架构上不优雅!!
考虑缓存架构:A,命中率;B,过期时间;C,分布性(单点失效)
2,cache server通常不会单点,但cache value可能是单点;如果丢失,就直接穿透到db,需要考虑如何避免大规模穿透造成db直接crash;
3,线程池规划需要根据处理能力,放大若干倍。比如健康:100;峰值:400~600;最大值:800;超过800则报错以确保系统健康。如果线程池只规划为50,则要分析是否不足。
4,要减少每一次不必要的查询,比如domain->ip1->ip2;如:ip1只是用于查询domain和ip2,则应直接建立domain和ip2的关系
4, 做压力测试时,导入数据(在进行压力测试之前,使表中已有一定数量的数据)
5,任何数据库查询必须在规划范围内执行,比如:每一port只能查询/写入小于1000次/s;不能允许在cache失效情况下大规模查询数据;
--
Tim has a distributed mutex fake code
--
if (memcache.get(key) == null) {
// 3 min timeout to avoid mutex holder crash
if (memcache.add(key_mutex, 3 * 60 * 1000) == true) {
value = db.get(key);
memcache.set(key, value);
memcache.delete(key_mutex);
} else {
sleep(50);
retry();
}
}
----------
6,任何执行前端转发的机器执行的任务必须是短而快,如果长而慢,则必须拆分到后面的业务。因前端转发业务通常在1~2ms内完成,而server的数量通常为2~4台。
7,如非常小且快的逻辑,比如直接验证不通过,可考虑从前端转发server上直接拒绝掉。这样可节省后续逻辑;
8,mc cas重试会导致操作时间变长,这个问题如何解决???
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
可否用redis解决?redis不支持CSA
$$Redis 是单线程,而 memcached 是单进程多线程,所以,为防止资源争夺,
$$memcached 使用 了 CAS 协议,带来 cpu 内存消耗
9,自动化工具:master自动切换到slave。。。
3. 本厂服务器sysctl.conf配置
net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout 修改系統默认的 TIMEOUT 时间。
net.ipv4.tcp_fin_timeout = 30
表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为30分钟。
net.ipv4.tcp_keepalive_time = 1800
放大向外连接的端口范围
net.ipv4.ip_local_port_range = 1024 65000
表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
net.ipv4.tcp_max_syn_backlog = 8192
尽量使用物理内存
vm.swappiness = 0
分享到:
相关推荐
sysctl.conf优化方案,非常详细,是播布客上一位老师写出来的总结。
sysctl.conf中文参数指南[收集].pdf
网上关于sysctl.conf的优化方案有各种版本,大多都是抄来抄去的,让新人看了很迷茫
如何设置Sysctl.conf用以提高Linux的性能(最完整的).docx
配置文件我们的服务器端 sysctl.conf 内核参数,如当前部署
性能调整 性能调整/调整/高并发/低延迟/内核调整/故障排除/ sysctl.conf 请访问获取内容!
1、 首先应该做的是/etc/sysctl.conf配置文件的 net.ipv4.ip_forward = 1 默认是0 这样允许iptalbes FORWARD。 vim /etc/sysctl.conf # 找到下面的值并将0改成1 net.ipv4.ip_forward = 1 # sysctl –p(使之立即...
FreeBSD下sysctl.conf的配置参数详解
EOF | sudo tee /etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1EOFsudo sysctl --system安装泊坞窗# (Install Docker CE)# # Set up the repository:# ## ...
9 配置内核参数 /etc/sysctl.conf 10 配置权限参数 /etc/security/limits.conf 11 配置全局shell /etc/profile 12 互信 13 时钟同步 14 配置共享磁盘 验证安装Grid环境
sudo vi /etc/sysctl.conf 代码: # Kernel sysctl configuration file for Red Hat Linux # # For binary values, 0 is disabled, 1 is enabled. See sysctl(8) and # sysctl.conf(5) for more details. # ...
系统公式 设置和配置sysctl的公式。 目录 一般注意事项请参阅完整的SaltStack Formulas安装和使用说明。 如果您对编写公式或对... sysctl.param 此状态管理/etc/sysctl下的文件sysctl.conf (可在“ sysctl / files”中
在/etc/sysctl.conf中添加:net.core.somaxconn = 2048,然后在终端中执行sysctl -p。 tcp-backlog 511 #指定 redis 只接收来自于该 IP 地址的请求,如果不进行设置,那么将处理所有请求 bind 127.0.0.1
第7章 修改/etc/sysctl.conf文件中的系统参数,加入如下: 38 第8章 路由配置信息 39 第9章 LVM基础信息查询 40 第10章 光纤口状态查询 41 第11章 更改主机相关IP 42 附:/etc/cluster/cluster.conf文件内容 43
vi /etc/sysctl.conf kernel.core_uses_pid = 1 kernel.core_pattern=/tmp/core-%e-%p 3.sysctl配置生效 sysctl -p /etc/sysctl.conf 这样就可以实现以后发生coredump时,core文件就可以自动生成到
8. oracle需要的参数配置(/etc/profile、 .bash_profile、 /etc/sysctl.conf) 9. oracle安装需要的图形化支持(linux的xmanager配置,vnc配置) 10.对oracle rac配置ssh的互信 11.oracle优化的操作系统层(linux优化...
软件开发设计:应用软件开发、系统软件开发、移动应用开发、网站开发Node.js、C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、...
sysctl.conf 博文链接:https://zhengdl126.iteye.com/blog/1717016
# 正式环境配置不设置堆大小 # 需要设置下面的参数 # sysctl -w vm.max_map_count=262144 docker run --name elasticsearch7.16.3 -p 127.0.0.1:9200:9200 -p 127.0.0.1:9300:9300 -e "discovery.type=single-node" ...
linux环境下oracle10g安装 ...[root@oracle10g /]# vi /etc/sysctl.conf kernel.shmall = 2097152 kernel.shmmax = 4294967296 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 fs.file-max = 65536 ...