0%

服务注册中心

在之前服务规模较小时,可以使用硬编码的方式来将服务地址写在代码中,通过编码的方式来实现服务的路由和负载均衡的问题,也可以使用硬件负载均衡设备(如F5)或者软件负载均衡(如nginx和lvs)等方式来进行处理。但微服务中服务很多,如果使用硬编码提供者的地址的话,管理起来不方便,而且可能会出现单点问题

服务注册与查询

为了避免单点故障,出现了注册中心,用来动态注册和获取服务信息,来统一进行管理服务名称和对应的服务器列表信息

服务提供者、服务消费者、注册中心关系

  • 微服务启动时,将自己的网络地址等信息注册到注册中心中,注册中心会存储这些信息
  • 服务消费者可以从注册中心中查询到服务提供者的网络地址,并使用该地址调用服务提供者的接口
  • 各个微服务与注册中心使用一定机制(如心跳)通信,如果注册中心长时间无法与微服务实例通信成功,则注销该实例
  • 微服务网络地址发生变更时,会重新注册到注册中心
阅读全文 »

负载均衡算法

集中式负载均衡

在服务的消费方和提供方之间使用独立的LB设施(可以是硬件,如F5,也可以是软件,如Nginx),由该设施负责把访问请求通过某种策略转发至服务的提供方

进程内负载均衡

将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的服务器,如ribbon

阅读全文 »

Nginx查找耗时的接口

1
2
# grep 是筛选的域名   awk中的$5是判断的状态码  sort中的15是指的upstream_response_time  当然也可以统计request_time的时间
cat access.log | grep 'zhhll.icu' | awk '$5 == 200{print $0}' | sort -k 15 -n -r | head -10

监控CPU利用率

使用vmstat来分析CPU使用信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash
DATE=$(date +%F" "%H:%M)
IP=$(ifconfig eth0 |awk -F '[ :]+' '/inet addr/{print $4}') # 只支持CentOS6
MAIL="example@mail.com"
if ! which vmstat &>/dev/null; then
echo "vmstat command no found, Please install procps package."
exit 1
fi
US=$(vmstat |awk 'NR==3{print $13}')
SY=$(vmstat |awk 'NR==3{print $14}')
IDLE=$(vmstat |awk 'NR==3{print $15}')
WAIT=$(vmstat |awk 'NR==3{print $16}')
USE=$(($US+$SY))
if [ $USE -ge 50 ]; then
echo "
Date: $DATE
Host: $IP
Problem: CPU utilization $USE
" | mail -s "CPU Monitor" $MAIL
fi

监控内存利用率

使用free来分析内存使用信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash
DATE=$(date +%F" "%H:%M)
IP=$(ifconfig eth0 |awk -F '[ :]+' '/inet addr/{print $4}')
MAIL="example@mail.com"
TOTAL=$(free -m |awk '/Mem/{print $2}')
USE=$(free -m |awk '/Mem/{print $3-$6-$7}')
FREE=$(($TOTAL-$USE))
# 内存小于1G发送报警邮件
if [ $FREE -lt 1024 ]; then
echo "
Date: $DATE
Host: $IP
Problem: Total=$TOTAL,Use=$USE,Free=$FREE
" | mail -s "Memory Monitor" $MAIL
fi