zoukankan      html  css  js  c++  java
  • 架构师学习之路

    LVS 四层   转发   内存和CPU   配置简单

    NGINX:L4-L7   七层    代理     正则表达式      geoip 

    1.不支持自动以URL检测       2.IP_HASH     3.负载均衡算法少   rr wrr   ip_hash

    haproxy:L4-L7  cookie

    rr

    wrr

    最小连接数

    source

    URI

    HTTP请求头

    cookie

    squid   Varnish  ATS   

    Nginx+Squid  Nginx+varnish   Nginx+ats

    73              76:2222     76:1111

    client  ->    proxy --->   server

    73           74:6666   76:2222     76:1111

    client ->>proxy  -->>proxy    -> server

    缓存:

    Buffer   缓冲  写操作     写缓冲

    Cache  缓存   读操作    读缓存

    速度      多级

    读缓存

    客户端   浏览器

    内存       本机内存           远程服务器内存

    硬盘        本机硬盘          远程服务器硬盘

    特性:

    1.过期时间

    2.强制过期

    3.命中率

    4.

     应用层缓存:

    php 5..5 Zend Opcache 

    pph opcache + 软链接  部署完需要重启php-fpm 

     redis key 大小,不建议超过2M

    超过2M的key值,建议分片处理:

    hash :h1 h2 h3 h4 h5 

    keys : xxx h1,h2, h3, h4, h5

    redis集群:

    1.客户端分片           优势:简单   可控

                                      缺点:手动 手动故障解决 手动数据迁移

    2.Redis cluster   

    3.Proxy 

    11012

    数据库          表

    key     hash 

    云服务

    云计算前:

    IDC托管:买台机器-放到IDC-安装系统-部署应用-买个域名-绑定上去-对外访问

     ICP备-ICP证-文网文-、 IDC租用、VPS、虚拟主机

    传统数据中心面临的问题:

    资源利用率低:

    资源分配不合理:

    自动化能力差:

    初始成本高:

    云计算来了:

    1.一种模式   2.云计算必须通过网络是使用   3.弹性计算、按需计算、快速扩展

    不用关心基础设施,都有云计算提供商提供

    云计算分类:

    私有云:

    公有云:

    混合云:

    云计算分层:IAAS,PAAS,SAAS

    虚拟化:

    内合计虚拟化技术KVM

    使用场景分类:服务器虚拟化,桌面虚拟化、应用虚拟化。

    前期总结:

    1.运维标准,ITIL

    2.自动化安装-cobbler

    3.监控体系-Zabbix

    4.配置管理-SaltStack

    5.自动化代码部署

    6.日志平台-ELKStack

    持续集成和自动化部署

    环境规划

    1.开发环境-开发者本地有自己的环境,然后运维需要设置的开发环境,大家公用的服务。例如:开发数据库mysql,其他:Redis、Memcached。

    2.测试环境:功能测试环境和性能测试环境。

    3.预生产环境:生产环境集群中的某一个节点担任。

    4.生产环境:直接对用户提供服务的环境

    预生产环境产生的原因:

          数据库不一致:测试环境和生产环境数据库肯定是不一样的。

          使用生产环境的联调接口。例如,支付接口。

    已有一个可以上线的代码在代码仓库

    我们如何设计一套生产自动化部署系统

    1.规划

    2.实现

    3.总结和扩展

    4.在生产环境应用

    1.1个集群10个节点。实现,一键部署这个10个节点。

    2.一键回滚到任意版本

    3.一键回滚到上一个版本

    部署  回滚

    部署:

    1.代码在哪里:SVN、git。

    2.获取什么版本代码?

         svn+git 直接拉取master 

        svn: 指定版本号 

       git:指定tag

    3.差异解决:

                      1)各个节点直接差异:

                       2)配置文件未必一样:crontab.xml  预生产节点  

                       3)代码仓库和实际的差异。配置文件是否放在代码仓库中。Config.sample 配置文件只在部署上有,单独的项目。

    4.如何更新。Java Tomcat。需要重启

    5.测试。

    6.串行和并行  分组部署

    7.如何执行 1)shell ./执行。  2)web界面    

     实战:

    1.用户 所有的web服务,都应该使用普通用户。所有的web服务都不应该监听80端口,除了负载均衡。8080

       useradd www

    2.ssh-keygen -t rsa

    Salt State  SLS描述文件          YAML

    名称ID声明   

    apache-install:         #ID声明   高级状态,ID必须唯一
      pkg.installed:           #State 声明 状态声明
        - names:
          - httpd
          - httpd-devel

    apache-service:        #ID声明    高级状态,ID必须唯一
      service.running:        #State 声明 状态声明
        - name: httpd            #属性,选项声明
        - enable: True         

    LAMP架构

            步骤:                           模块

          1.安装软件包                  pkg

           2.修改配置文件              file

           3.启动服务                      service

    pkg.installed   #安装

    pkg.latest       #确保最新版本

    pkg remove      #卸载

    pkg.purge       # 卸载并删除配置文件

    pkg.installed

    一个ID声明下面。状态模块不能重复使用

    #同时安装多个包

    common_packages:

      pkg.installed:
        - pkgs:
          - unzip
          - dos2unix
          - salt-minion: 2015.8.5-1.el6
    lamp-pkg:
    pkg.installed:
    - pkgs:
    - httpd
    - php
    - mysql
    - php-mysql
    - mariadb-server
    - php-cli
    - php-mbstring
    apache-config:
    file.managed:
    - name: /etc/httpd/conf/httpd.conf
    - source: salt://lamp/files/http.conf
    - group: root
    - user: root
    - mode: 644

    php-config:
    file.managed:
    - name: /etc/php.ini
    - source:salt://lamp/files/http.conf
    - user: root
    - group: root
    - mode: 644
        salt:// 表示当前环境的根目录。例如:

    file_roots:
      base:
        -  /home/script/salt

    那么salt://lamp/files/http.conf  表示 /home/script/salt/lamp/files/http.conf

    状态间关系:

       1.我依赖谁        require

        

       2.我被谁依赖  require_in 

        

         

       3.我监控谁      watch   

        

        1).如果 apache-config这个ID的状态发生变化就reload

        2)如果不加reload: True,那么就restart

       4.我被谁监控

       5.我引用谁     include

         

       6.我扩展谁

     如何编写SLS技巧:

        1.按状态分类    如果单独使用,很清晰

         2.按服务分类    可以被其他的SLS include。例如:LAMP include mysql的服务

    yaml---jinja

    两种分隔符: {% ... %} 和 {{ ... }} 

    构建个模板需要3步:

          1.告诉File模块,你要使用jinja

           - template: jinja

           2.你要列出参数列表          

                  - defaults:

                      - PORT: 88

            3.模板引用

                  {{ PORT }}

    模板里面支持: salt执行模块 grinas pillar 进行赋值

    1.写在模板文件中

    Grainas:Listen {{ grains['fqdn_ip4'][0] }}:{{ PORT }}、

    salt远程执行模块:{{ salt['network.hw_addr']('eth0') }}

     pillar  {{ pillar['apache'] }}

    2.写在SLS里面的defaults,变量列表中

    - defaults:

              IPADDR: {{ grains['fqdn_ip4'][0] }}

              PROT: 88

    所有的minion 出去的Pillar中item rsyslog的值是server的minion

    头脑风暴:

    1.系统初始化

     2.功能模块:设置单独的目录 haproxy nginx php mysql memcached

         尽可能的全、独立

    3.业务模块: 根据业务类型划分,例如web服务。论坛 bbs

        include  

    干活:

        1.salt环境配置

    开发       测试 (功能测试环境、性能测试环境)        预生产           生产

    1)base    基础环境

    init 目录 ,环境初始化:1.dns配置  2.history记录时间   3.记录命令操作   4.内核参数优化  5.安装yum仓库    6.安装zabbix-agent

                                           

    2)prod     生产环境

    本地可用的端口范围:

        作为客户端发起连接的时候。

        socket 网络套接字

        五元组

        源地址  源端口   目的地址    目的端口    协议

        TCP  你要访问baidu  x.x.x.x 9876   x.x.x.x 80 

    深入学习saltstack远程执行:

              salt ‘*’  cmd.run 'w'

    命令:salt

    目标:'*'

    模块:cmd.run  自带150+模块。自己写模块

    返回:执行后结果的返回,Returners

    目标:Targeting

                两种:一种和mininon ID有关

                            一种和Minion  ID无关

    1.Minion ID有关的方法。

        Minion ID 

       通配符

    salt '*'  test.ping

    salt 'linux[1|2]'  test.ping

         列表

    salt 'master,slave'  test.ping

          正则表达式:

    salt -E  'linu(node1|node2)*'   test.ping   

          所有匹配目标的方式,都可以用到top file里面来指定目标

         主机名设置方案:

               1.IP地址

                2.根据业务来进行设置

                    redis-node1-redis-03-idc04-soa.example.com

                    redis-node1  redis第一个节点

                    redis04  集群

                     idc04    机房

                      soa      业务线

    2.Minion ID 无关

       子网,IP地址

        salt -s 192.168.53.11  test.ping

        salt -s 192.168.53.0/24  test.ping

    模块:自带模块

    返回程序:

    编写模块:

    1.放哪  /svr/salt/_modules

    2.命名:文件名就是模块名,例如  my_disk.py

    3.刷新

    saltstack快速入门:

    python 编写 REST API

       三大功能:远程执行

                         配置管理(状态)

                          云管理

    同类产品:Puppet + func ruby 编写,ansible python 编写

    四种运行方式:

            Local:

            Minion/Master C/S架构

            Syndic  - zabbix  Proxy

            Salt SSH

    典型案例:

    1.远程执行 salt "*" cmd.run 'uptime'

    2.State  你要写一个文件。格式:YAML  后缀 .sls

     YAML:三板斧

           1.缩进(层级关系):两个空格,不能使用tab键。

            2.冒号  key: value   冒号后面有个空格

            3.短横线 - list1   短横线后面有个空格

                           - list2

    SaltStack 数据系统

         Grains (谷粒):静态数据  当Minion启动的时候收集的Minion本地的相关信息

                                        操作系统版本 ,内核版本,CPU,内存,硬盘。设备型号。序列号

               1.资产管理。信息查询

                2.用于目标选择   salt -G 'os:centos' cmd.run 'w'  

                3.配置管理中使用。 

    TOP File 使用案例:

    base:
        'slave':
          - web.apache
        'roles:apache':
          - match: grain
          -web.apache

       配置管理案例:

    开发一个Grains:

          python: 写一个Python脚本,返回一个字典就可以了。

          

    #!/usr/bin/env python
    #-*- coding: utf-8 -*-

    def my_grains():
    #初始化一个grains字典
    grains = {}
    #设置字典中的key-value
    grains['iaas'] = 'openstack'
    grains['edu'] = 'oldboyedu'
    #返回这个字典
    return grains

    刷新Grains:

             salt ‘*’  saltutil.sync_grains

    Grains优先级:

        1.系统自带

         2.grains文件写的

          3.minion配置文件写的

          4.自己写的

            

        Pillar       (柱子)

    Pillar 动态的,给特定的minion指定特定的数据。只有指定的minion自己能看到自己的数据。

    pillar_roots  top file

    1.写pillar  sls

    2.top file

    [root@master web]# salt 'master' pillar.item hehe
    master:
    ----------
    hehe:
    ----------
    apache:
    httpd

    pillar使用场景:

    1.目标选择

    Grains VS Pillar

                   类型         定义位置    数据采集方式         应用场景

    Grains    静态          minion       minion启动收集        数据查询   目标选择     配置管理      

    Pillar      动态           master       master自定义         目标选择   配置管理     敏感数据

    工作流:

    监控自动化分类:

    1.自动注册

    1.1zabbix agent自动添加

    2.主动发现

        2.1 自动发现discover

         2.zabbix api

    curl -s -X POST -H 'Content-Type:application/json' -d  '

    {
        "jsonrpc": "2.0",
        "method": "user.login",
        "params": {
            "user": "Admin",
            "password": "zabbix"
        },
        "id": 1
    }' http://172.16.1.11/zabbix/discoveryconf.php|python -m json.tool

    1,监控主机多,性能跟不上,延迟大

         2.多机房,防火墙

    zabbix轻松解决。Nagios不太好解决

          监控模式,针对Agent来说

    1.被动模式

    2.主动模式 active

     Queue里有大量延迟的item

       当监控主机超过300+,建议使用主动模式

    主动模式配置:

    Zabbix Proxy

           zabbix-server ->>zabbix proxy ->zabbix agent

            

    yum install -y zabbix-proxy zabbix-proxy-mysql mariadb-server

    Zabbix生产案例实战

    1、项目规划

      主机分组:    

         交换机

          NGINX

         tomcat

         mysql

     监控对象识别:

         1.使用SNMP监控交换机

          2.使用IPMI监控服务器硬件

          3.使用Agent监控服务器

          4.使用JMX监控java

          5.监控mysql

         6.监控web状态

          7.监控NGINX状态

    SNMP监控

    1.1.交换机开启snmp

           config t

          snmp-server  community public ro

           end

     1.2.在zabbix 上添加监控

    3.关联监控模板

    IPMI:

        建议:使用自定义item,本地执行IPMItool命令来获取数据

    JMX :(使用Zabbix Java Gateway 代理)

    1.yum install zabbix-java-gateway java-1.8.0

    2.vim  /etc/zabbix/zabbix_java_gateway.conf

    3.启动systemctl start zabbix-java-gateway.service

    4.端口 进程

    JMX 三种类型:1.无密码认证 2.用户密码认证 3.ssl

    5.vim /etc/zabbix/zabbix_server.conf

       设置Java Gageway地址

    6.重启zabbix server

     安装 Tomcat,启动Tomcat,端口8080

    开启jmx远程监控

    vim catalina.sh 

    CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote
    -Dcom.sun.management.jmxremote.port=8888
    -Dcom.sun.management.jmxremote.ssl=false
    -Dcom.sun.management.jmxremote.authenticate=false
    -Djava.rmi.server.hostname=172.16.1.11"

    重启Tomcat

    手动检测监控状态

    yum install -y zabbix-get

    1.开启NGINX监控

    2.编写脚本来进行数据采集

    3.设置用户自定义参数

    4.重启zabbix-agent

    5.添加item

    6.创建图形

    7.创建触发器

    8.创建模板

      1)编写脚本

       2)上传到/etc/zabbix/zabbix_agentd.d/

       3).修改agent配置Include=/etc/zabbix/zabbix_agentd.d/*.conf

        4)chmod u+x 脚本

    location /nginx_status {
    stu_status on ;
    access_log off;
    allow 127.0.0.1/24;
    deny all;
    }

    UserParameter=linux_status[*],/etc/zabbix/zabbix_agentd.d/zabbix_linux_plugin.sh "$1" "
    $2" "$3"

    重启代理

    测试

    zabbix_get -s 172.16.1.11 -k linux_status[nginx_status,81,active]

    自定义告警脚本:

       1.放在cd /usr/lib/zabbix/alertscripts/

        2.要支持三个参数 1收件人 2主题 3内容

         3.执行权限

          4.web界面添加

          5.修改Actions

    使用percona监控插件监控mysql

    yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
    https://www.percona.com/doc/percona-monitoring-plugins/LATEST/zabbix/index.html
    yum install percona-zabbix-templates
    1.php脚本用来数据采集
    2.shell 调用这个PHP
    3.zabbix配置文件
    4.zabbix模板文件
    创建mysql数据库zabbix专用用户

    完整告警流程:

    1.创建用户组,添加权限,权限只能按用户组分配

    2.创建用户,选择用户角色

    3.报警媒介

    4.Action

        添加新主机后,要确认权限分配。

    自定义监控项:

    1.添加用户自定义参数

    cat /etc/zabbix/zabbix_agentd.d/nginx.conf
    UserParameter=nginx.active,/usr/bin/curl -s http://172.16.1.11:81/nginx-status|awk 'NR==1 {print $NF}'

    2.重启zabbix-agent

    3.在server端使用zabbix-get测试获取

    zabbix_get -s 172.16.1.11 -p 10050 -k "nginx.active"
    1

    4.在web界面创建item

    5.自定义图形:

    6.自定义screen:

    7.自定义map:

    作业:

       1.网络监控 Smokeping部署

       2.zabbix熟悉乱点

      3.下次分享 Piwik 流量分析系统

    zabbix概述:

         zabbix-agent

        zabbix-server

    mysql数据库-

    web界面

    应用服务监控:

           nginx:

    yum install -y gcc glibc gcc-c++ pcre-evel  openssl-devel

    wget http://nginx.org/download/nginx-1.10.1.tar.gz

    configure   Shell 脚本,执行他的作用。生成 MAKEFILE 

    ./configure -prefix=/application --user=nginx --group=nginx.......

    make && make install

    ln /application/nginx-1.10.1/  /applicaiton/nginx

    监控体系: 采集 存储 展示 告警

    Nagios+Cacti

    Zabbix   IPMI  SNMP JVM  Server - Agent

    Gangla

    监控:

    监控对象

          1.监控对象的理解:CPU 是怎么工作的。原理

           2.监控对象的指标:CPU使用率,CPU负载 CPU个数 CPU上下文切换

           3.确定性能基准线:怎么样才算故障?CPU负载多少才算高

    监控范围:

           1.硬件监控              服务器的硬件故障

           2.操作系统监控       CPU 内存 IO 进程 

            3.应用服务监控 

             4.业务监控              

    硬件监控:

            远程控制卡:DELL 服务器:iDRAC

                                  HP服务器:ILO

                                 IBM服务器:IMM

             Linux就可以使用IPMI  BMC控制器   

             ipmitool    

             1.硬件要支持IPMI

              2.操作系统支持  Linux IPMI 

               3.管理工具         ipmitool

    安装:yum install OpenIPMI ipmitool

    启动:systemctl start ipmi

    使用IPMI有两种方式1   本地调用

                                      2.  远程调用

    ipmitool help

    ipmi 配置网络,有两种方式:

           ipmi over lan

           独立:单独网线(单独交换机配置ipmi)       

    硬件监控:         1.使用IPMI 2.机房巡检

    路由器和交换机:SNMP(简单管理网络协议) 监控

            yum install net-snmp net-snmp-utils -y

    系统监控:

       ---CPU

       ---内存

     -----IO Input/Ouput(网络、磁盘)

    CPU三个重要概念:

           上下文切换:CPU调度器实施的进程的切换过程,上下文切换

            运行队列(负载):运行队列  

            使用率:

           时间片

    确定服务类型:

          IO密集型: 数据库

         CPU密集型: web mail

    确定性能基准线:

           运行队列 :1-3线程    1CPU 4核  负载不超过12个线程

           CPU使用:65%-70% 用户态利用率

                              30%-35%   内核态利用率

                              0%-5%       空闲

           上下文切换:

    监控工具:top:P CPU使用率排序    M内存使用率排序

                      top vmstat mpstat

    内存:free vmstat

               页 4KB 

                1.寻址  2.空间    

    硬盘:块      iotop dd iostat

              IOPS   IO’s Per Second

               顺序IO

               随机IO

    网络:iftop  带宽   

    阿里测试,奇云测

    IBM nmon  二进制                   测试用

    作业:

    1.注册GITHUB,创建edu-docs项目

    2.熟悉基本git命令

    3.上传今天编写的第一个规范,到github上

    4.讲Cobbler的实验在虚拟机上再次完成,并编写文档

    预习:

    1.安装zabbix

    自动化规范:

    1.服务器采购

    2.服务器验收并设置raid

    3.服务商提供验收单,运维验收负责人签字

    4.服务器上架

    5.资产录入

    6.开始自动化安装

        1)将新服务器划入装机VLAN

        2)根据资产清单上的MAC地址,自定义安装

         3)

    基于ITIL的IT运维管理体系:

    运维自动化发展层级:智能化、服务化(API)、Web化、平台化、标准化、工具化

    智能化

    智能化的自动化扩容、缩容、服务降级、故障自愈

    触发机制--》决策系统(决策树)--》

                    1、 zabbix触发Action

    触发:

    1)、当某个集群的访问量超过最大支撑量,比如10000.

    2)、并持续5分钟

    3)、不是攻击

    4)、资源池有可用资源

        4.1) 当前网络带宽使用率

         4.2 )如果是共有云,钱够不够

    5)、当前后端服务支撑量是否超过阈值,如果超过应该后端先扩容

    6)、数据库是否可以支撑当前并发

    7)、当前自动化扩展队列,是否有正在扩容的节点

    8)、其他业务相关的

                     之前:先判断Buffer是否有最近X小时,已经移除的之前创建的虚拟机

                                并查询软件版本是否和当前一致,如果一致,从第5步开始

                                如果不一致,从第4步开始

                          2、OpenStack 创建虚拟机

                          3、Saltstack 配置环境---------监控

                          4、部署系统部署当前代码

                          5、测试服务是否可用(注意间隔和次数)

                          6、加入集群

                          7、通知(短信、邮件)

    自动化缩容:

                         1、触发条件和决策

                          2、从集群中移除节点---关闭监控--移除

                          3、通知

                          4、移除的节点存放于Buffer里面

                           5、Buffer里面超过1天的虚拟机,自动关闭,存放于xx区

                           6、xx区的虚拟机,每7天清理删除

    服务化(API化)

    DNS WEB 管理 bind-DLZ       dns-api

    负载均衡WEB管理                   slb-api

    JOB管理平台                            job-api

    监控WEB管理 Zabbix           zabbix-api 

    操作系统安装平台                 cobbler-api

    部署平台                                deploy-api

    配置管理平台                      saltstack-api

    自动化测试平台                     test-api

           1、调用 cobbler-api安装操作系统

            2、调用saltstack-api进行系统初始化

             3、调用 dns-api解析主机名

             4、调用zabbix-api 将新上线机器加上监控

              5、再次调用 saltstack-api部署软件(安装NGINX+PHP)

               6、调用deploy-api将当前版本的代码部署到服务器上

               7、调用  test-api测试当前服务运行十分正常

                8、调用slb-api将该节点加入集群

    运维操作平台-WEB化:

                  例子:JOB管理平台

    1、做成web界面

    2、权限控制

    3、日志记录

    4、弱化流程

    5、不用SSH到服务器,减少人为操作造成的故障 web ssh

    DNS WEB 管理 bind-DLZ

    负载均衡WEB管理

    JOB管理平台

    监控WEB管理 Zabbix

    操作系统安装平台

    工具化:

        1.SHELL脚本(功能性(流程)脚本、检查性、报表性)

         2.开源工具:Zabbix ELKStack SaltStack Cobbler

         目标:1、促进标准化的实施

                    2、将重复的操作,简单化

                     3、将多次操作,流程化

                      4、减少人为操作的低效和降低故障率

                     工具化和标准化是好基友!

    痛点:

                  1、至少要SSH到服务器执行。可能犯错

                  2、多个脚本有执行顺序的时候,可能犯错

                   3、权限管理问题,日志没法统计

                    4、无法避免手工操作

    运维自动化发展:

    1.运维标准化

    物理设备层面:

           1)服务器标签化、设备负责人、设备采购详情、设备摆放标准。

            2)网络划分、远程控制卡、网卡端口

            3)服务器机型、硬盘、内存统一。根据业务分类。

            4)资产命名规范、编号规范、类型规范

            5)监控标准

    操作系统层面:

            1)操作系统版本

             2)系统初始化(DNS、NTP、内核参数调优、rsyslog、主机名规范)

              3)基础Agent配备(Zabbix Agent、Logstash Agent、Saltstack minion)

               4)系统监控标准(CPU、内存、硬盘、网络、进程)

    应用服务层面:

                1)Web服务器选型(Apache、Nginx)

                 2)进程启动用户、端口监听规范、日志收集规范(访问日志、错误日志、运行日志)

                 3)配置管理(配置文件规范、脚本规范)

                  4)架构规范(Nginx+Keepalived、LVS+Keepalived等)

                   5)部署规范(位置、包命名等)

    运维操作层面:

                    1)机房巡检流程(周期、内容、报修流程)

                    2)业务部署流程(先测试、后生产。回滚)

                    3)故障处理流程(紧急处理、故障升级、重大故障管理)

                     4)工作日志标准(如何编写工作日志)

                     5)业务上线流程(1.项目发起 2.系统安装 3.部署Nginx 4.解析域名 5.测试 6.加监控 7.备份)

                      6)业务下线流程(谁发起,数据如何处理。)

                       7)运维安全规范(密码复杂度、更改周期、VPN使用规范、服务登陆规范)

     目标:文档化

    运维知识体系:

    https://www.unixhot.com/page/ops

    运维学习和发展的一个线路:

    1.搭建服务(部署并运行起来)

    2.用好服务(监控、管理、优化)

    3.自动化(服务直接的关联和协同工作)

    4.产品设计(如何设计一个监控系统)

    云计算的核心竞争力是运维!

    系统架构师(偏管理):网络 系统 数据库 开发 云计算 自动化 运维管理 服务管理 项目管理 测试 业务

    专注某一领域

  • 相关阅读:
    工学A B 刊物
    学习OpenCV
    MFC1
    csmath
    走进心理学
    第八篇: UpdateProgress 控件显示正在处理中的信息
    第十篇: Timer 控件
    第六篇: UpdatePanel 控件UpdateMode属性
    第九篇: UpdateProgress 控件用户中断
    第五篇: UpdatePanel 控件RegisterAsyncPostBackControl方法
  • 原文地址:https://www.cnblogs.com/liujiacai/p/9005919.html
Copyright © 2011-2022 走看看