`

架构师笔记【杂】cache/容量及带宽规划/sysctl.conf配置等

阅读更多

 

不知道什么时候记得一些笔记,现在翻出来看看还是很有启发。也不想整理了,格式有点乱不过反映了当时的一些思考。

好的架构时演进出来的而不是从石头缝里蹦出来的,需要我们在工作中不断的思考、总结、实践。。。

 

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

0
0
分享到:
评论

相关推荐

    sysctl.conf优化方案

    sysctl.conf优化方案,非常详细,是播布客上一位老师写出来的总结。

    sysctl.conf中文参数指南[收集].pdf

    sysctl.conf是Linux系统中的一份核心配置文件,用于控制和设置系统的各种参数。下面是sysctl.conf文件中的重要参数解释: 1. dev.scsi.logging_level = 0 这个参数控制SCSI设备的日志级别。设置为0表示不记录任何...

    如何设置Sysctl.conf用以提高Linux的性能(最完整的).docx

    ### 如何设置Sysctl.conf用以提高Linux的性能 #### Sysctl概述 `Sysctl`是一种强大的工具,用于调整Linux内核的各种参数,包括网络、内存管理和其他关键系统配置。通过对`/etc/sysctl.conf`文件进行适当的配置,...

    sysctl.conf的优化方案

    网上关于sysctl.conf的优化方案有各种版本,大多都是抄来抄去的,让新人看了很迷茫

    sysctl.conf:我们的服务器端 sysctl.conf 内核参数,如当前部署

    sysctl.conf文件通常位于/etc/sysctl.conf路径下,它是通过sysctl工具来读取并应用这些配置的。这个文件包含了大量内核参数的设定,每行代表一个参数,格式为`参数名=值`。通过修改这些参数,管理员可以对内存管理、...

    performance-tuning:性能调整调整高并发低延迟内核调整sysctl.conf

    "sysctl.conf"文件是Linux系统中的一个重要配置文件,它允许管理员调整内核参数以优化系统性能。本篇文章将深入探讨如何通过调整`sysctl.conf`来优化高并发、低延迟环境的性能。 首先,我们需要理解`sysctl.conf`的...

    DG文档的制作

    这里修改了`/etc/sysctl.conf`文件中的多个内核参数,例如: - `kernel.msgmax`: 设置消息队列的最大长度。 - `kernel.shmmax`: 共享内存段的最大大小。 - `kernel.shmall`: 系统可以支持的最大共享内存段数目。 - `...

    centos6.5 iptables实现端口转发

    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(使之立即...

    k8s-base-setup

    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:# ## ...

    Redhat5及Oracle11g详细安装配置及管理.doc

    echo 'kernel.sem = 250 32000 100 128' &gt;&gt; /etc/sysctl.conf echo 'fs.file-max = 6815744' &gt;&gt; /etc/sysctl.conf echo 'net.ipv4.ip_local_port_range = 9000 65500' &gt;&gt; /etc/sysctl.conf sysctl -p ``` 3. **...

    Centos 7 Oracle 12C 超详细安装

    这一步骤可以通过编辑 `/etc/sysctl.conf` 文件并使用 `sysctl -p` 命令使更改生效来实现。 ```bash MEMTOTAL=$(free -b | sed -n '2p' | awk '{print $2}') SHMMAX=$(expr $MEMTOTAL / 2) SHMMNI=4096 PAGESIZE=$...

    在Ubuntu Server(804,904)上安装Oracle 10g企业版

    echo "kernel.sem = 250 32000 100 128" &gt;&gt; /etc/sysctl.conf echo "fs.file-max = 65536" &gt;&gt; /etc/sysctl.conf echo "net.ipv4.ip_local_port_range = 1024 65000" &gt;&gt; /etc/sysctl.conf # 加载新的配置 sysctl -p #...

    Red_Hat_Linux5.5 下安装 oracle

    这可以通过修改 `/etc/sysctl.conf` 文件实现,并使用 `sysctl -p` 命令使更改立即生效。 ```bash echo 'kernel.shmall = 2097152' &gt;&gt; /etc/sysctl.conf echo 'kernel.shmmax = 2147483648' &gt;&gt; /etc/sysctl.conf ...

    oracle12c 安装文档

    可以通过编辑`/etc/sysctl.conf`文件来实现这些配置: ``` echo "fs.aio-max-nr=1048576" &gt;&gt; /etc/sysctl.conf echo "fs.file-max=6815744" &gt;&gt; /etc/sysctl.conf echo "kernel.shmall=2147483648" &gt;&gt; /etc/sysctl....

    How to configure OneFS to allow NFS mounts from unprivileged ports

    将上述设置添加到`/etc/mcp/override/sysctl.conf`文件中,确保重启后仍然生效: ``` echo "vfs.nfsrv.nfs_privport=1" &gt;&gt; /etc/mcp/override/sysctl.conf ``` #### OneFS 6.x配置方法 对于更早版本的OneFS 6...

    11gR2 RAC搭建

    9 配置内核参数 /etc/sysctl.conf 10 配置权限参数 /etc/security/limits.conf 11 配置全局shell /etc/profile 12 互信 13 时钟同步 14 配置共享磁盘 验证安装Grid环境

    Oracle在LINUX平台下的安装教程详解

    echo "kernel.sem = 250 32000 100 128" &gt;&gt; /etc/sysctl.conf echo "fs.file-max = 65536" &gt;&gt; /etc/sysctl.conf echo "net.ipv4.ip_local_port_range = 9000 65500" &gt;&gt; /etc/sysctl.conf echo ...

    oracle11g设置内核参数和limit的增强

    这意味着DBA不再需要手动编辑`/etc/sysctl.conf`和`/etc/security/limits.conf`文件,只需执行一个脚本即可完成所有配置。 ##### 执行脚本完成配置 一旦脚本生成完毕,DBA需要以root用户身份执行该脚本。这一步骤...

    linux sysctl参数配置详细介绍

    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. # ...

    linux-DHCP服务器+中继路由.doc

    使用sysctl -p /etc/sysctl.conf命令启用中继路由功能。 DHCP 中继功能配置 1. 打开 DHCP 配置文件 使用vi /etc/dhcpd.conf命令打开 DHCP 配置文件,并添加中继功能配置。例如: ``` option routers 192.168.1.1...

Global site tag (gtag.js) - Google Analytics