新时代码农
未读1. 轮询法将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。 2.随机法通过系统的随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。由概率统计理论可以得知,随着客户端调用服务端的次数增多,其实际效果越来越接近于平均分配调用量到后端的每一台服务器,也就是轮询的结果。 3. 源地址哈希法源地址哈希的思想是根据获取客户端的 IP 地址,通过哈希函数计算得到的一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是客服端要访问服务器的序号。采用源地址哈希法进行负载均衡,同一 IP 地址的客户端,当后端服务器列表不变时,它每次都会映射到同一台后端服务器进行访问。 4. 加权轮询法不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同。给配置高、负载低的机器配置更高的权重,让其处理更多的请;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配到后端。 5. 加权随机法与加权轮询法一样,加权随机法也根据后端 ...
AI:人工智能
未读Curator 是 Netflix 公司开源的一套 zookeeper 客户端框架,解决了很多 Zookeeper 客户端非常底层的细节开发工作,包括连接重连、反复注册 Watcher 和 NodeExistsException 异常等等。Patrixck Hunt(Zookeeper)以一句“Guava is to Java that Curator to Zookeeper”给 Curator 予高度评价。引子和趣闻:Zookeeper 名字的由来是比较有趣的,下面的片段摘抄自《从 PAXOS 到 ZOOKEEPER 分布式一致性原理与实践》一书:Zookeeper 最早起源于雅虎的研究院的一个研究小组。在当时,研究人员发现,在雅虎内部很多大型的系统需要依赖一个类似的系统进行分布式协调,但是这些系统往往存在分布式单点问题。所以雅虎的开发人员就试图开发一个通用的无单点问题的分布式协调框架。在立项初期,考虑到很多项目都是用动物的名字来命名的 (例如著名的 Pig 项目),雅虎的工程师希望给这个项目也取一个动物的名字。时任研究院的首席科学家 Raghu Ramakrishnan ...
基础数据结构字符串 字符串类型的值实际可以 是字符串(简单的字符串、复杂的字符串(例如 JSON、XML))、数字 (整数、浮点数),甚至是二进制(图片、音频、视频),但是值最大不能 超过 512MB。 12345set key value [ex seconds] [px milliseconds] [nx|xx]setex key seconds valuesetnx key value set 命令有几个选项: ex seconds:为键设置秒级过期时间。 px milliseconds:为键设置毫秒级过期时间。 nx:键必须不存在,才可以设置成功,用于添加。 xx:与 nx 相反,键必须存在,才可以设置成功,用于更新。 set、setnx、set xx 的区别123456789101112redis> get namedong4jredis> setnx name dong# 因为 name 已存在, 设置失败0redis> get namedong4jredis> set name dong4j xx# name 存在才能使用 xxO ...
Redis 的 5 种数据结构 Redis 数据结构和内部编码 Redis 的单线程模型Redis 使用单线程处理命令, 所以一条命令从客户端达到服务端不会立即执行, 所有命令都会进入一个队列, 然后逐个被执行. Redis 单线程处理速度快的原因 纯内存访问, 内存的响应时长约为 100 纳秒 非阻塞 I/O, Redis 使用 epoll 作为 I/O 多路复用技术的实现, 再加上 Redis 自身的事件处理模型将 epoll 中的连接、读写、关闭都转换为事件,不 在网络 I/O 上浪费过多的时间 单线程避免了线程切换和竞态产生的消耗 存在的问题 对于每个命令的执行时间有要求. 如果某个命令执行时间过长, 会造成其他命令阻塞
新时代码农
未读Redis 可执行文件说明 可执行文件 作用 redis-server 启动 Redis redis-cli Redis 命令行客户端 redis-benchmark Redis 基准测试工具 redis-check-aof Redis AOF 持久化文件检测和修复工具 redis-check-dump Redis RDB 持久化文件检测和修复工具 redis-sentinel 启动 Redis Sentinel 启动方式1. 默认配置 1redis-server 2. 运行参数 12345# 格式redis-server --configKey1 configValue1 --configKey2 configValue2# 使用 6380 端口启动 redisredis-server --port 6380 3. 配置文件 1redis-server /usr/local/redis/redis.conf 3.1 基础配置 配置名 说明 port 端口 logfile 日志文件 dir Redis 工作目录 (存放 ...
系统 Centos 64 位 第一步,首先下载 Nginx 的 tar 包及安装依赖的工具 tar 包。Nginx: http://nginx.org/en/download.html Nginx 需要依赖下面 3 个包gzip 模块需要 zlib 库 ( 下载: http://www.zlib.net/ )rewrite 模块需要 pcre 库 ( 下载: http://www.pcre.org/ )ssl 功能需要 openssl 库 ( 下载: http://www.openssl.org/ ) 分别解压。具体命令: 123456789wget http://nginx.org/download/nginx-1.13.2.tar.gzwget http://www.zlib.net/zlib-1.2.11.tar.gzwget https://ftp.pcre.org/pub/pcre/pcre-8.40.tar.gzwget https://www.openssl.org/source/openssl-fips-2.0.16.tar.gztar zxvf openssl ...
Redis 的 3 种用法 内存缓存 定量数据指标 发布/订阅模型 作为内存环境数据结构1. 字符串 string 1234567891011121314// 设置字符串类型set mystr "hello world!"// 读取字符串类型get mystr// 通过字符串类型进行数值操作 在遇到数值操作时,redis 会将字符串类型转换成数值。127.0.0.1:6379> set mynum "2"OK127.0.0.1:6379> get mynum"2"127.0.0.1:6379> incr mynum(integer) 3127.0.0.1:6379> get mynum"3" INCR 等指令本身就具有原子操作的特性,所以我们完全可以利用 redis 的 INCR、INCRBY、DECR、DECRBY 等指令来实现原子计数的效果,假如,在某种场景下有 3 个客户端同时读取了 mynum 的值(值为 2),然后对其同时进行了加 1 的操作,那么, ...
1. 下载 & 安装MongoDB 3.0 正式版本发布! 这标志着 MongoDB 数据库进入了一个全新的发展阶段,提供强大、灵活而且易于管理的数据库管理系统。MongoDB 宣称,3.0 新版本不只提升 7 到 10 倍的写入效率以及增加 80% 的数据压缩率,还能减少 95% 的运维成本。 MongoDB 3.0 主要新特性包括: · 可插入式的存储引擎 API · 支持 WiredTiger 存储引擎 ·MMAPv1 提升 · 复制集全面提升 · 集群方面的改进 · 提升了安全性 · 工具的提升 WiredTiger 存储引擎是一项难以置信的技术实现,提供无门闩、非堵塞算法来利用先进的硬件平台 (如大容量芯片缓存和线程化架构) 来提升性能。通过 WiredTiger,MongoDB 3.0 实现了文档级别的并发控制,因此大幅提升了大并发下的写负载。 MongoDB 提供了 centos yum 安装方式。 vi /etc/yum.repos.d/mongodb-org-3.0.repo ...
使用 root 用户登录,下面的操作基本都没有 root 的困扰,如果非 root 用户请切换至 root 用户操作。 1、查看系统当前的 shell 1echo $SHELL 返回结果如下: 1/bin/bash PS. 默认的 shell 一般都是 bash 2、查看 bin 下是否有 zsh 包 1cat /etc/shells 返回结果如下: 123456/bin/sh/bin/bash/sbin/nologin/bin/dash/bin/tcsh/bin/csh PS. 默认没有安装 zsh 3、安装 zsh 包 1yum -y install zsh 安装完成后查看 shell 列表: 1cat /etc/shells 返回结果如下: 1234567/bin/sh/bin/bash/sbin/nologin/bin/dash/bin/tcsh/bin/csh/bin/zsh 现在 zsh 已经安装完成了,需要把系统默认的 shell 由 bash 切换为 zsh 3、切换 shell 至 zsh,代码如下: 1chsh -s /bin/zsh ...
简述使用 linux 就离不开 shell,那么也就是说也离不开 shell 编程。很多时候服务器都需要编写一些计划任务来定时运行的,所以掌握一些基本的 shell 编程基础很有必要。 本文是我在网上收集的一些资料,主要目的是帮助自己更好的了解掌握 shell 编程的一些基础知识。 什么是 Shell 脚本示例看个例子吧: 123456789#!/bin/shcd ~mkdir shell_tutcd shell_tutfor ((i=0; i<10; i++)); do touch test_$i.txtdone 示例解释: 第 1 行:指定脚本解释器,这里是用/bin/sh 做解释器的 第 2 行:切换到当前用户的 home 目录 第 3 行:创建一个目录 shell_tut 第 4 行:切换到 shell_tut 目录 第 5 行:循环条件,一共循环 10 次 第 6 行:创建一个 test_1…10.txt 文件 第 7 行:循环体结束 123cd, mkdir, touch 都是系统自带的程序,一般在/bin或者/usr/bin目 ...
新时代码农
未读定义变量1234567891011#!/bin/bash# 定义 变量名和等号之间不能有空格your_name="dong4j"# 使用echo ${your_name}# 循环输出for skill in Ada Coffe Action Javado echo "I am good at ${skill} Script"done 只读变量readonly 变量名 删除变量unset 变量名 特殊变量1234567891011121314$0当前脚本的文件名$n传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。$#传递给脚本或函数的参数个数。$*传递给脚本或函数的所有参数。$@传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。$?上个命令的退出状态,或函数的返回值。$$当前 Shell 进程 ID。对于 Shell 脚本,就是这些脚本所在的进程 ID。 shell 替换命令替换123 ...
最近在做一个社交化的在线商店, 有 Android 和 iOS 客户端, 后台使用 java, 我主要负责接口设计和实现.目前产品已经上线, 现在主要是前端的业务流程优化, 后台的优化和需求更改. 客户端使用 Web app + Native app 的形式.对于菜鸟级我的来说, 以前的小项目都是 10 多张表就搞定了, 现在这个项目有 170 多张表, 想来要完全熟悉全部的业务流程需要花写功夫了.以前都是写的 Java Web 项目, 现在一下来写 Web app 项目有点不习惯, 主要是测试有点麻烦. 接下来, 我将写写来对项目的总体认识以及 Web app 开发和 Java Web 开发的区别 (其实也没多大区别), 算是做一个总结吧. Web app 和 Native app 的区别Native App: 开发成本非常大。一般使用的开发语言为 Java、C++、Objective-C。 更新体验较差、同时也比较麻烦。每一次发布新的版本,都需要做版本打包,且需要用户手动更新(有些应用程序即使不需要用户手动更新,但是也需要有一个恶心的提示)。 非常酷。因为 Native ...
相关特征方法区特征 同 Java 堆一样,方法区也是全局共享的一块内存区域 方法区的作用是存储 Java 类的结构信息,当我们创建对象实例后, 对象的类型信息存储在方法堆之中,实例数据存放在堆中;实例数据指的是在 Java 中创建的各种实例对象以及它们的值,类型信息指的是定义在 Java 代码中的常量、静态变量、以及在类中声明的各种方法、方法字段等等;同事可能包括即时编译器编译后产生的代码数据。 JVMS 不要求该区域实现自动的内存管理,但是商用 JVM 一般都已实现该区域的自动内存管理。 方法区分配内存可以不连续,可以动态扩展。 该区域并非像 JMM 规范描述的那样数据一旦放进去就属于 “永久代”; 在该区域进行内存回收的主要目的是对常量池的回收和对内存数据的卸载;一般来说这个区域的内存回收效率比起 Java 堆要低得多。 当方法区无法满足内存需求时,将抛出 OutOfMemoryError 异常。 运行时常量池的特征 运行时常量池是方法区的一部分, 所以也是全局共享的。 其作用是存储 Java 类文件常量池中的符号信息。 class 文件中存在常量池 (非运行时常量池), ...
final、finally 和 finalize 虽然长得像孪生三兄弟一样,但是它们的含义和用法却是大相径庭。这一次我们就一起来回顾一下这方面的知识。 final 关键字 我们首先来说说 final。它可以用于以下四个地方: 定义变量,包括静态的和非静态的。 定义方法的参数。 定义方法。 定义类。 我们依次来回顾一下每种情况下 final 的作用。首先来看第一种情况,如果 final 修饰的是一个基本类型,就表示这个变量被赋予的值是不可变 的,即它是个常量;如果 final 修饰的是一个对象,就表示这个变量被赋予的引用是不可变的,这里需要提醒大家注意的是,不可改变的只是这个变量所保存的 引用,并不是这个引用所指向的对象。在第二种情况下,final 的含义与第一种情况相同。实际上对于前两种情况,有一种更贴切的表述 final 的含义的描 述,那就是,如果一个变量或方法参数被 final 修饰,就表示它只能被赋值一次,但是 JAVA 虚拟机为变量设定的默认值不记作一次赋值。 被 final 修饰的变量必须被初始化。初始化的方式有以下几种: 在定义的时候初始化。 final 变 ...