• Algorithm。主要是为了编程训练和学习。每周至少做一个 leetcode 的算法题(先从Easy开始,然后再Medium,最后才Hard)。进行编程训练,如果不训练你看再多的算法书,你依然不会做算法题,看完书后,你需要训练。关于做Leetcode的的优势,你可以看一下我在coolshell上的文章 Leetcode 编程训练 - 酷 壳 - CoolShell(一个小时以内);

  • Review:主要是为了学习英文,如果你的英文不行,你基本上无缘技术高手。所以,需要你阅读并点评至少一篇英文技术文章,我个人最喜欢去的地方是 Medium(需要×××,其他的可以社区的官方文档以及论文学习)以及各个公司的技术blog,如Netflix的(30min);

  • Tip:主要是为了总结和归纳你在是常工作中所遇到的知识点。学习至少一个技术技巧。你在工作中遇到的问题,踩过的坑,学习的点滴知识(也可以学习【极客时间】上的实用课程);

  • Share:主要是为了建立你的影响力,能够输出价值观。分享一篇有观点和思考的技术文章,也可以是技术总结的文章。

Algorithm :Go实现

package main

import "fmt"

func BinarySearch(arr *[6]int,leftIndex int,rightIndex int ,findVal int ){
   if  leftIndex > rightIndex{
      fmt.Printf("%v中找不到\t元素%v\n",(*arr),findVal)
      return
   }

   //先找到中间下标
   midddle := (leftIndex+rightIndex)/2
   if   (*arr)[midddle] >findVal {
      //说明要查找的数在左边  就应该向 leftIndex ---- (middle - 1)再次查找
      BinarySearch(arr,leftIndex,midddle-1,findVal)
   }else if  (*arr)[midddle] < findVal{
      //如果 arr[middle] < findVal , 就应该向 middel+1---- rightIndex
      BinarySearch(arr,midddle+1,rightIndex,findVal)
   }else {
      //找到了
      fmt.Printf("%v中找到元素%v,下标为%v\n",(*arr),findVal,midddle)
   }


}


func main() {
     ArraryNum := [6]int{1,8, 10, 89, 1000, 1234}
     ArraryNum2 := [6]int{8,200, 300, 889, 1000, 1234}
   BinarySearch(&ArraryNum,0,len(ArraryNum),1234)
   BinarySearch(&ArraryNum2,0,len(ArraryNum),300)
   BinarySearch(&ArraryNum,0,len(ArraryNum),-8)
   BinarySearch(&ArraryNum2,0,len(ArraryNum),30)
}
结果:
[1 8 10 89 1000 1234]中找到元素1234,下标为5
[8 200 300 889 1000 1234]中找到元素300,下标为2
[1 8 10 89 1000 1234]中找不到	元素-8
[8 200 300 889 1000 1234]中找不到	元素30

Review:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/resource_management_guide/index  

  CentOS 7 资源管理  Cgroup

Tip: 

    1、zabbix-web 迁移

       自己部署zabbix环境都是lamp,而公司中使用的一套LNMP,虚拟机需要下架,所以需要对其迁移,主要有以下步骤:

      (1)部署lnmp环境

     (2)安装zabbix-web的服务,为了更好的兼容。使用和原来版本一致的zabbix-web服务

     (3)替换配置文件  将老的服务上的一些配置文件迁移到新的,对功能做测试,所有功能测试完毕,迁移完成

  2、openresty安装脚本

#!/bin/bash

NGX_PATH=$(cd `dirname $0`; pwd)
BUILD_PATH=$NGX_PATH/build/openresty
INSTALL_PATH=/usr/install
OR_INSTALL_PATH=${INSTALL_PATH}/openresty
NGX_INSTALL_PATH=${OR_INSTALL_PATH}/nginx

PCRE="pcre-8.36"
ZLIB="zlib-1.2.8"
OPENSSL="openssl-1.1.0i"
OPENRESTY="openresty-1.13.6.2"

PCRE_PATH=${BUILD_PATH}/${PCRE}
ZLIB_PATH=${BUILD_PATH}/${ZLIB}
OPENSSL_PATH=${BUILD_PATH}/${OPENSSL}
OPENRESTY_PATH=${BUILD_PATH}/${OPENRESTY}

PCRE_TAR=${BUILD_PATH}/${PCRE}.tar.gz
ZLIB_TAR=${BUILD_PATH}/${ZLIB}.tar.gz
OPENSSL_TAR=${BUILD_PATH}/${OPENSSL}.tar.gz
OPENRESTY_TAR=${BUILD_PATH}/${OPENRESTY}.tar.gz

rm -rf ${BUILD_PATH} && mkdir -p ${BUILD_PATH}
yum -y install automake autoconf libtool make gcc gcc-c++ unzip patch 1>/dev/null
curl -L http://192.168.48.4/soft/nginx/openresty.tar.gz -o $NGX_PATH/openresty.tar.gz
if [ -f "$NGX_PATH/openresty.tar.gz" ]; then
    tar -zxvf ${NGX_PATH}/openresty.tar.gz -C ${BUILD_PATH} 1>/dev/null
else
    echo -e "$NGX_PATH/nginx.tar.gz does not exist"
    exit
fi

function configure_f {
    if [ "$?" != 0 ];then
        echo -e "\tCompile failed, please check"
        exit
    else
        echo -e "\tCompile successfully"
    fi
}

function make_f {
    if [ "$?" != 0 ];then
        echo -e "\tMake is failed, please check"
        exit
    else
        echo -e "\tMake successfully"
    fi
}

function make_install_f {
    if [ "$?" != 0 ];then
        echo -e "\tMake install is failed, please check"
        exit
    else
        echo -e "\tMake install successfully"
    fi
}

if [ -f "$PCRE_TAR" ]; then
    tar -zxvf ${PCRE_TAR} -C ${BUILD_PATH} 1>/dev/null
    echo -e "\t$PCRE_TAR is uncompress complete"
else
    echo -e "\t$PCRE_TAR does not exist"
    exit
fi

if [ -f "$ZLIB_TAR" ];then
    tar -zxvf ${ZLIB_TAR} -C ${BUILD_PATH} 1>/dev/null
    echo -e "\t$ZLIB_TAR is uncompress complete"
else
    echo -e "\t$ZLIB_TAR does not exist"
    exit
fi

if [ -f "$OPENSSL_TAR" ]; then
    tar -zxvf ${OPENSSL_TAR} -C ${BUILD_PATH} 1>/dev/null

    echo -e "\t$OPENSSL_TAR is uncompress complete"
else
    echo -e "\t$OPENSSL_TAR does not exist"
    exit
fi

if [ -f "$OPENRESTY_TAR" ]; then
    tar -zxvf ${OPENRESTY_TAR} -C ${BUILD_PATH} 1>/dev/null

    echo -e "\tStart configure install $OPENRESTY_TAR"
    cd ${OPENRESTY_PATH}
    ./configure -j8 --user=admin --group=admin \
        --prefix=${OR_INSTALL_PATH} \
        --with-openssl=${OPENSSL_PATH} \
        --with-pcre=${PCRE_PATH} \
        --with-pcre-jit \
        --with-zlib=${ZLIB_PATH} \
        --with-stream \
        --with-stream_ssl_module \
        --with-http_ssl_module \
        --with-http_stub_status_module \
        --with-http_realip_module
    configure_f
    make -C ${OPENRESTY_PATH} 1>/dev/null
    make_f
    make -C ${OPENRESTY_PATH} install 1>/dev/null
    make_install_f
    echo -e "\t$OPENRESTY_TAR is install complete"
else
    echo -e "\t$OPENRESTY_TAR does not exist"
    exit
fi

chown -R admin:admin ${NGX_INSTALL_PATH}
chown root:admin ${NGX_INSTALL_PATH}/sbin/nginx
chmod 4755 ${NGX_INSTALL_PATH}/sbin/nginx
ln -s ${NGX_INSTALL_PATH} ${INSTALL_PATH}/nginx

echo -e "Nginx installation is complete : $NGX_INSTALL_PATH"


Share:

  

关于运维标准化的一些想法

   因为这一周做了一个基建nginx的迁移,踩了很多的坑,先列一下踩到的坑,然后再分析总结一下,应该怎么做,

(1)光迁移nginx,防火墙NAT绑定新的VIP后发现zabbix不能访问,经过排查原先的nginx服务器还安装了zabbix-web,php-fpm等环境。

(2)部署zabbix和php等环境再次更改防火墙NAT信息,这次所有服务正常没发生意外,因为原来的机器要下架,所以不知道里面还有什么依赖,就将原来的服务停止了,然后诸多应用不可用,服务启动后又正常,事情有点妖,明明更改的是对外服务的nginx,但是内部的服务挂了一堆。。。。 心理难以接受,去排查最后发现DNS里以及若干机器的host文件中绑定了原来的ip和域名。。踩了若干的坑,花了很久,最后才让所有服务恢复正常。

想法“    

    一个简单的迁移,也是一次变更,要是核心业务在上面就是一次故障,一直提倡运维标准化,运维自动化,如何做到自动化呢,肯定是先做到标准化,总不可能400台机器,3多台的的服务和配置都没标准和规律,这时候程序、脚本都无计可施。如何做自动化?

    另一方面,部署环境和项目一定要有相关的技术文档,谁也不能保证自己不跑路,后期工作交接、带新人、查阅资料等都是需要文档的,虽然当时部署的时候说自己记在脑子里,但是时间长了就尴尬了。。你还记得吗? 其他人问你怎么做的时候,完全可以给别人一份文档,既能减去你的工作量,同时别人还认为你做事完美