10 4
UNIX编程设计原则

Unix诞生与1969年,可一个可以改变21世纪甚至更远的未来的操作系统问世,至少现在的Linux是基于Unix的设计哲学。unix汇聚了很多黑客的智慧,他是一个开放,自由,KISS,单一的系统。

下面原则整理自《Unix编程艺术》

1.模块原则

使用简洁的接口拼合简单的部件。

2.清晰原则

清晰胜于技巧。

3.组合原则

设计时考虑拼接组合,在输入输出方面,Unix极力提倡采用简单、文本化、面向流、设备无关的格式。因此一般在Unix下多数程序都尽可能采用简单过滤器的形式,将一个输入的简单文本流处理为一个简单的文本流输出。

4.分离原则

策略同机制分离,接口同引擎分离。

5.简洁原则

设计要简洁,复杂度能低则低。

6.吝啬原则

除非确无他法,不要编写庞大的程序。

7.透明性原则

设计要可见,以便审查和调试。要一眼就能看出软件是在做什么以及怎样做的。显见性指程序带有监视和显示内部状态的功能。

8.健壮原则

健壮源于透明和简洁。

9.表示原则

复杂的数据,尽量用数组初始化表示,不要把复杂的选择逻辑丢进程序里。

10.通俗原则

接口设计避免标新立异。越通俗,越流行,越好。

11.缄默原则

即程序只做该做的事,不做多余的事,默默工作

12.补救原则

出现异常时,马上退出并给出足够错误信息。

13.经济原则

宁花机器一分,不花程序员一秒。

14.生成原则

避免手工hack,尽量编写程序去生成程序。

15.优化原则

优化之前先确保能用。先求运行,再求正确,最后求快。

16.多样原则

按我的理解,就是兼容性强,广泛采取多种语言、开放的可扩展系统和用户定制机制。

17.扩展原则

设计着眼未来,未来总比预想来得快。

一言以蔽之:K.I.S.S Keep It Simple,Stupid!

6 30
Kubernetes集群搭建

本文主要纪录Ubuntu环境下搭建Kubernetes集群的相关步骤,包括网络环境、docker配置、k8s安装。这里把安装过程中遇到的问题以及解决方法也纪录下来,然后分享出来

本文操作环境的默认用户为 root

一、环境准备

为了快速搭建,我选用了三台ubuntu的虚拟机,初步规划如下:

操作系统 服务器IP 节点名称 角色
Ubuntu 18.04 192.168.159.101 kmaster master节点
Ubuntu 18.04 192.168.159.102 knode-1 worker节点
Ubuntu 18.04 192.168.159.103 knode-2 worker节点
Ubuntu 18.04 192.168.159.104 knode-3 worker节点
3 22
Nginx对网段内ip的连接数限流配置

Nginx中的所谓连接数限制,其实是tcp连接,也就是请求方通过三次握手后成功建立的连接状态。Nginx一般为我们提供了 ngx_http_limit_conn_module 模块来提供限制连接功能。该模块可以根据定义的键来限制每个键值的连接数,如同一个IP来源的连接数。

ngx_http_limit_conn_module指令解释

Syntax:    limit_conn zone number;
Default:    —
Context:    http, server, location

该指令描述会话状态存储区域。键的状态中保存了当前连接数,键的值可以是特定变量的任何非空值(空值将不会被考虑)。$variable定义键,zone=name定义区域名称。 常见使用例子:

limit_conn_zone $binary_remote_addr zone=addr:10m;

server {
    location /download/ {
        limit_conn addr 1;
    }

上面例子表示当请求访问 /download/ 时, 同一时刻只能一个请求连接会成功进行资源下载。

网段限制

常见的limit_conn_zone 配置一般设置 $binary_remote_addr 或 $server_name,进行单一ip或主机级的连接数限制。

但有时候我们希望能对某ip网段进行连接数限制,那我们可以这么做:

http {

... ...

    limit_conn_zone $ip_segment zone=network_segment:10m;

    server {
            ... ...
            set $ip_segment $remote_addr;

            if ( $ip_segment ~ ^(\d+)\.(\d+)\.(\d+)\.(\d+) ) {
                set $ip_segment $1.$2.$3;
            }

            location /download/ {
                limit_conn network_segment 10; 
                #limit_rate  200k;
            }

    }
}

这样基本能满足Nginx对网段内所有ip的连接数做统一的连接数限制了。

2 17
分布式系统学习:二阶段提交

CAP理论

在学习分布式的相关知识点前,一定要先掌握CAP定理:

  • C(onsistency) 一致性:分布式环境中,CAP关注的粒度是数据,而不是系统,而数据往往存在于多个副本之中,一致性是指多个副本之间,在同一时刻能否有同样的值(内容和组织上的数据)

  • A(vailability) 可用性:系统提供的服务必须一直处于可用的状态。即使集群中一部分节点故障。换句话说就是用户在容忍的时间范围内返回用户期望的结果

  • P(artition-resiliene) 分区容错性:系统在遇到节点故障,或者网络分区时(断网),依然能对外提供一致性和可用性的服务,在分布式系统架构中,通常由多个节点组成,由于节点通讯往往依赖网络,网络在现实中不是100%可靠的,所以分区容错是分布式的一个 “最基本要求” ,所以一般我们常见的CAP架构只有 AP和CP。

后一页