大型网站系统架构演化之路

运维 being 发表了文章 0 个评论 3340 次浏览 2016-01-10 16:26 来自相关话题

前言 一个成熟的大型网站(如淘宝、天猫、腾讯等)的系统架构并不是一开始设计时就具备完整的高性能、高可用、高伸缩等特性的,它是随着用户量的增加,业务功能的扩展逐渐演变完善的,在这个过程中,开发模式、技术架构、设计思想也发生了很大的变化, ...查看全部


前言


一个成熟的大型网站(如淘宝、天猫、腾讯等)的系统架构并不是一开始设计时就具备完整的高性能、高可用、高伸缩等特性的,它是随着用户量的增加,业务功能的扩展逐渐演变完善的,在这个过程中,开发模式、技术架构、设计思想也发生了很大的变化,就连技术人员也从几个人发展到一个部门甚至一条产品线。所以成熟的系统架构是随着业务的扩展而逐步完善的,并不是一蹴而就;不同业务特征的系统,会有各自的侧重点,例如淘宝要解决海量的商品信息的搜索、下单、支付;例如腾讯要解决数亿用户的实时消息传输;百度它要处理海量的搜索请求;他们都有各自的业务特性,系统架构也有所不同。尽管如此我们也可以从这些不同的网站背景下,找出其中共用的技术,这些技术和手段广泛运用在大型网站系统的架构中,下面就通过介绍大型网站系统的演化过程,来认识这些技术和手段。


一、最开始的网站架构


最初的架构,应用程序、数据库、文件都部署在一台服务器上,如图:
website_arch1.png


二、应用、数据、文件分离


随着业务的扩展,一台服务器已经不能满足性能需求,故将应用程序、数据库、文件各自部署在独立的服务器上,并且根据服务器的用途配置不同的硬件,达到最佳的性能效果。
website_arch2.png


三、利用缓存改善网站性能


在硬件优化性能的同时,同时也通过软件进行性能优化,在大部分的网站系统中,都会利用缓存技术改善系统的性能,使用缓存主要源于热点数据的存在,大部分网站访问都遵循28原则(即80%的访问请求,最终落在20%的数据上),所以我们可以对热点数据进行缓存,减少这些数据的访问路径,提高用户体验。
website_arch3.png

缓存实现常见的方式是本地缓存、分布式缓存。当然还有CDN、反向代理等,这个后面再讲。本地缓存,顾名思义是将数据缓存在应用服务器本地,可以存在内存中,也可以存在文件,OSCache就是常用的本地缓存组件。本地缓存的特点是速度快,但因为本地空间有限所以缓存数据量也有限。分布式缓存的特点是,可以缓存海量的数据,并且扩展非常容易,在门户类网站中常常被使用,速度按理没有本地缓存快,常用的分布式缓存是Memcached、Redis。


四、使用集群改善应用服务器性能


应用服务器作为网站的入口,会承担大量的请求,我们往往通过应用服务器集群来分担请求数。应用服务器前面部署负载均衡服务器调度用户请求,根据分发策略将请求分发到多个应用服务器节点。
website_arch4.png

常用的负载均衡技术硬件的有F5,价格比较贵,软件的有LVS、Nginx、HAProxy。LVS是四层负载均衡,根据目标地址和端口选择内部服务器,Nginx和HAProxy是七层负载均衡,可以根据报文内容选择内部服务器,因此LVS分发路径优于Nginx和HAProxy,性能要高些,而Nginx和HAProxy则更具配置性,如可以用来做动静分离(根据请求报文特征,选择静态资源服务器还是应用服务器)。


五、数据库读写分离和分库分表


随着用户量的增加,数据库成为最大的瓶颈,改善数据库性能常用的手段是进行读写分离以及分库分表,读写分离顾名思义就是将数据库分为读库和写库,通过主备功能实现数据同步。分库分表则分为水平切分和垂直切分,水平切分则是对一个数据库特大的表进行拆分,例如用户表。垂直切分则是根据业务的不同来切分,如用户业务、商品业务相关的表放在不同的数据库中。
website_arch5.png


六、使用CDN和反向代理提高网站性能


假如我们的服务器都部署在成都的机房,对于四川的用户来说访问是较快的,而对于北京的用户访问是较慢的,这是由于四川和北京分别属于电信和联通的不同发达地区,北京用户访问需要通过互联路由器经过较长的路径才能访问到成都的服务器,返回路径也一样,所以数据传输时间比较长。对于这种情况,常常使用CDN解决,CDN将数据内容缓存到运营商的机房,用户访问时先从最近的运营商获取数据,这样大大减少了网络访问的路径。比较专业的CDN运营商有蓝汛、网宿。
website_arch6.png

而反向代理,则是部署在网站的机房,当用户请求达到时首先访问反向代理服务器,反向代理服务器将缓存的数据返回给用户,如果没有缓存数据才会继续访问应用服务器获取,这样做减少了获取数据的成本。反向代理有Squid,Nginx。


七、使用分布式文件系统


用户一天天增加,业务量越来越大,产生的文件越来越多,单台的文件服务器已经不能满足需求,这时就需要分布式文件系统的支撑。常用的分布式文件系统有GFS、HDFS、TFS。
website_arch7.png


八、使用NoSql和搜索引擎


对于海量数据的查询和分析,我们使用nosql数据库加上搜索引擎可以达到更好的性能。并不是所有的数据都要放在关系型数据中。常用的NOSQL有mongodb、hbase、redis,搜索引擎有lucene、solr、elasticsearch。
website_arch8.png


九、将应用服务器进行业务拆分


随着业务进一步扩展,应用程序变得非常臃肿,这时我们需要将应用程序进行业务拆分,如百度分为新闻、网页、图片等业务。每个业务应用负责相对独立的业务运作。业务之间通过消息进行通信或者共享数据库来实现。
website_arch9.png


十、搭建分布式服务


这时我们发现各个业务应用都会使用到一些基本的业务服务,例如用户服务、订单服务、支付服务、安全服务,这些服务是支撑各业务应用的基本要素。我们将这些服务抽取出来利用分部式服务框架搭建分布式服务。阿里的Dubbo是一个不错的选择。
website_arch10.png


总结


大型网站的架构是根据业务需求不断完善的,根据不同的业务特征会做特定的设计和考虑,本文只是讲述一个常规大型网站会涉及的一些技术和手段。


分享阅读整理原文:http://www.cnblogs.com/leefreeman/p/3993449.html
参考书籍:《大型网站技术架构》《海量运维运营规划》


开源分布式数据库Mysql中间件Mycat

开源项目 chris 发表了文章 1 个评论 6903 次浏览 2016-01-09 19:54 来自相关话题

什么是MYCAT []一个彻底开源的,面向企业应用开发的大数据库集群[/][]支持事务、ACID、可以替代MySQL的加强版数据库[/][]一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群[/][]一个融合内存 ...查看全部


什么是MYCAT


    []一个彻底开源的,面向企业应用开发的大数据库集群[/][]支持事务、ACID、可以替代MySQL的加强版数据库[/][]一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群[/][]一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server[/][]结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品[/][]一个新颖的数据库中间件产品[/]

Mycat特性

    []支持SQL92标准[/][]遵守Mysql原生协议,跨语言,跨数据库的通用中间件代理。[/][]基于心跳的自动故障切换,支持读写分离,支持MySQL主从,以及galera cluster。[/][]支持Galera for MySQL集群,Percona Cluster或者MariaDB cluster[/][]基于Nio实现,有效管理线程,高并发问题。[/][]支持数据的多片自动路由与聚合,支持sum,count,max等常用的聚合函数。[/][]支持2表join,甚至基于caltlet的多表join。[/][]支持通过全局表,ER关系的分片策略,实现了高效的多表join查询。[/][]支持多租户方案。[/][]支持分布式事务(弱xa)。[/][]支持全局序列号,解决分布式下的主键生成问题。[/][]分片规则丰富,插件化开发,易于扩展。[/][]强大的web,命令行监控。[/][]支持前端作为mysq通用代理,后端JDBC方式支持Oracle、DB2、SQL Server 、 mongodb 、巨杉。[/][]支持密码加密[/][]支持IP白名单[/][]支持SQL黑名单、sql注入攻击拦截[/][]集群基于ZooKeeper管理,在线升级,扩容,智能优化,大数据处理(2.0开发版)。[/]

Mycat架构

mycat_arch.png

Mycat高可用方案

mysql_ha1.png
mysql_ha2.png
mysql_ha3.png
mycat_ha4.png

Mycat监控

    []支持对Mycat、Mysql性能监控[/][]支持对Mycat的JVM内存提供监控服务[/][]支持对线程的监控[/][]支持对操作系统的CPU、内存、磁盘、网络的监控[/]
mycateye1.png
mycateye2.png

目标

低成本的将现有的单机数据库和应用平滑迁移到“云”端,解决数据存储和业务规模迅速增长情况下的数据瓶颈问题。1.5版本架构
mycat2_0.png

长期规划2.0

    []完全实现分布式事务,完全的支持分布式。[/][]通过Mycat web(eye)完成可视化配置,及智能监控,自动运维。[/][]通过mysql 本地节点,完整的解决数据扩容难度,实现自动扩容机制,解决扩容难点。[/][]支持基于zookeeper的主从切换及Mycat集群化管理。[/][]通过Mycat Balance 替代第三方的Haproxy,LVS等第三方高可用,完整的兼容Mycat集群节点的动态上下线。[/][]接入Spark等第三方工具,解决数据分析及大数据聚合的业务场景。[/][]通过Mycat智能优化,分析分片热点,提供合理的分片建议,索引建议,及数据切分实时业务建议。[/]


优势


基于阿里开源的Cobar产品而研发,Cobar的稳定性、可靠性、优秀的架构和性能以及众多成熟的使用案例使得MYCAT一开始就拥有一个很好的起点,站在巨人的肩膀上,我们能看到更远。业界优秀的开源项目和创新思路被广泛融入到MYCAT的基因中,使得MYCAT在很多方面都领先于目前其他一些同类的开源项目,甚至超越某些商业产品。
MYCAT背后有一支强大的技术团队,其参与者都是5年以上资深软件工程师、架构师、DBA等,优秀的技术团队保证了MYCAT的产品质量。
MYCAT并不依托于任何一个商业公司,因此不像某些开源项目,将一些重要的特性封闭在其商业产品中,使得开源项目成了一个摆设。


Mycat关注


老外都开始关注Mycat了!
catmycat.png


Mycat官方论坛:http://i.mycat.io/forum.php
Mycat Github:https://github.com/MyCATApache
Mycat权威指南第一版_V1.5.1:http://pan.baidu.com/s/1i3SFOpf


docker web化管理

开源项目 Something 发表了文章 4 个评论 8298 次浏览 2016-01-05 18:03 来自相关话题

背景 目前很多公司都在使用docker,docker也是一种趋势,我们公司也在使用docker,所以我也跟着学习使用docker,根据基本需求,结合api做了一个web程序 实验环境 ...查看全部


背景


目前很多公司都在使用docker,docker也是一种趋势,我们公司也在使用docker,所以我也跟着学习使用docker,根据基本需求,结合api做了一个web程序


实验环境


本次试验使用两台实体机做模拟docker集群,一台虚拟机做docker镜像服务器,一台虚拟机做web管理机
系统软件环境及版本:
selinux disabled
iptables -F
三台docker机器系统使用centos7.1,两台模拟机群docker机软件docker+pipework+openswitch+etcd+dhcp,docker镜像服务器跑了一个registry容器提供镜像服务
Web管理机使用ubuntu,python+django+uwsgi
原理图:
yltu.png

 
程序流程图:
processlist.png


原理


通过web界面创建删除容器和镜像,web服务器通过api操作三台docker机器,创建容器时通过dhcp获取ip,pipework给容器附上获取的ip,并把容器信息写入etcd库中,由于容器重启后ip消失,我通过监控脚本给启动没有ip的容器重新附上ip。容器支持ssh,有好处也有风险。
网络这块我是用交换机提供的网段,容器使用的ip和实体机在同一valn,你也可以一个集群使用一个valn,这里我是用同一valn。容器ip可以从交换机dhcp获取,不懂交换机,我直接用一台docker实体机起了dhcp服务,为该段提供dhcp服务。


安装


1.1 docker集群节点
两台机器软件一样,我就以AB区别,软件基本一样,A多了一个dhcp,没有使用交换机提供dhcp
1.2 安装openswitch:
如果后期不想在docker集群中划分vlan,可以使用系统自带的brctl命令创建桥接网卡,下面创建桥接网卡的脚本相应的变一下,ovs-vsctl改为brctl
yum install gcc make python-devel openssl-devel kernel-devel graphviz kernel-debug-devel autoconf automake rpm-build redhat-rpm-config libtool
wget http://openvswitch.org/releases/openvswitch-2.3.1.tar.gz

tar zxvf openvswitch-2.3.1.tar.gz
mkdir -p ~/rpmbuild/SOURCES
cp openvswitch-2.3.1.tar.gz ~/rpmbuild/SOURCES/
sed 's/openvswitch-kmod, //g' openvswitch-2.3.1/rhel/openvswitch.spec > openvswitch-2.3.1/rhel/openvswitch_no_kmod.spec

rpmbuild -bb --without check openvswitch-2.3.1/rhel/openvswitch_no_kmod.spec
#之后会在~/rpmbuild/RPMS/x86_64/里有2个文件
-rw-rw-r-- 1 ovswitch ovswitch 2013688 Jan 15 03:20 openvswitch-2.3.1-1.x86_64.rpm
-rw-rw-r-- 1 ovswitch ovswitch 7712168 Jan 15 03:20 openvswitch-debuginfo-2.3.1-1.x86_64.rpm

yum localinstall ~/rpmbuild/RPMS/x86_64/openvswitch-2.3.1-1.x86_64.rpm

systemctl enable openvswitch
systemctl start openvswitch
1.3 下载pipework:
git clone https://github.com/jpetazzo/pipework.git
chmod +x pipework
cp pipework /usr/bin/pipework
1.4 网卡配置
脚本下载地址
在节点机器上
pwd
/root
check_modify_container.py create_docker_container_use_dhcp_ip.sh openvswitch_docker.sh
#openvswitch_docker.sh 是网卡初始化脚本
#create_docker_container_use_dhcp_ip.sh 是创建容器时会调用的脚本
#check_modify_container.py 容器ip监控脚本
crontab -e
[i]/5 [/i] [i] [/i] * python /root/check_modify_container.py #监控脚本每五分钟执行一次

em1 为管理网段ip
Ovs1桥接在em2上,为docker内网网段ip
配置网卡,这里使用桥接

cat openvswitch_docker.sh
#!/bin/bash
#删除docker测试机
#docker rm `docker stop $(docker ps -a -q)`
#删除已有的openvswitch交换机
ovs-vsctl list-br|xargs -I {} ovs-vsctl del-br {}
#创建交换机
ovs-vsctl add-br ovs1
#把物理网卡加入ovs1
ovs-vsctl add-port ovs1 em2
ip link set ovs1 up
ifconfig em2 0
ifconfig ovs1 192.168.157.21 netmask 255.255.255.0

chmod +x openvswitch_docker.sh
sh openvswitch_docker.sh

也可以写到配置文件中
我的em1为管理网卡10.0.0.21
A机器中安装dhcp,集群中一台机器配置dhcp就可以了,网段根据你的环境改变

yum install -y dhcp
vim /etc/dhcp/dhcpd.conf
log-facility local7;
ddns-update-style none;

subnet 192.168.157.0 netmask 255.255.255.0 {
range 192.168.157.100 192.168.157.200;
option domain-name-servers 202.106.0.20;
option routers 192.168.157.1;
option broadcast-address 192.168.157.255;
default-lease-time 80000;
max-lease-time 80000;
}
systemctl enable dhcpd
systemctl start dhcpd
1.5 安装docker
yum install -y docker
vim /etc/sysconfig/docker
OPTIONS='--selinux-enabled --insecure-registry 192.168.46.130:5000 -b=none -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock'
#指定镜像服务器为192.168.46.130,net使用none模式,监听2375端口,这个端口提供api访问的
systemctl start docker.service
systemctl enable docker.service
1.6 Etcd安装
yum install libffi libffi-devel python-devel
yum -y install epel-release
yum -y install python-pip
yum install etcd -y
vim /etc/etcd/etcd.conf
ETCD_NAME=default
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://localhost:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://localhost:2379"
[size=16]#这里etcd我没有做成集群,每台docker机的数据就保存在本机的etcd库中,不与其他节点同步,也不需要提供其他节点访问,这里设置监听本机[/size]
systemctl enable etcd
systemctl start etcd
2.1 docker镜像服务器
镜像服务器在安装配置完docker后,从官网pull下来一个registry镜像,启动创建一个镜像服务器容器
docker search registry
docker pull docker.io/registry
docker run --restart always -d -p 5000:5000 -v /opt/data/registry:/tmp/registry docker.io/registry
安装docker请重复1.5
3.1  web服务器
Django web程序下载地址
Web服务器系统我用的ubuntu,主要是安装软件简单,源及软件更新比较快
[quote]>> import django
>>> django.VERSION
(1, 7, 1, 'final', 0)这是我的django版本
apt-get install mysql-server mysql-client
apt-get install python-pip
pip install Django==1.7.1 #你也可以安装最新版本,不确定我写的程序能否正常运行
apt-get install python-mysqldb
pip install docker-py #要调用docker api,所以要安装相关python包
apt-get install curl
apt-get install mysql-server
apt-get isntall mysql-client
sudo apt-get install libmysqlclient-dev
apt-get install python-paramiko #web程序中也会用到curl和paramiko
git clone https://github.com/SomethingCM/Web-for-docker.git 到本地
cd Web-for-docker/docker_demo
vim docker_demo/settings.py
#修改数据库配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'docker', #docker 库名
'USER': 'root', #mysql登陆用户
'PASSWORD': 'dockerchen',#密码,如果mysql设置了用户名密码可以填写,没有则为空
'HOST':'',
'PORT':'',
}
}
#修改完以后创建表
./manage.py syncdb
#执行的时候会让你设置后台root用户密码,两次输入密码创建表成功
./manage.py runserver 0.0.0.0:80


初始化设置


在浏览器中输入 IP:port/admin 设置后台 IP为web服务器的ip
登陆后台admin初始化设置
loginadmin.png

admin.png

 
添加仓库节点
addregistry.png

 
添加节点
addnode1.png

addnode2.png

shownode.png

 
前台登陆
login.png

index.png

showimages.png

 
编写dockerfile创建镜像
dockerfile.png

showcontainers.png

 
把现有容器打包成镜像
containertoimage.png

 
创建容器
createcontailer.png
关于怎么用django+uwsgi发布网站这里就不叙述了
由于各种原因项目中途GAMEOVE了,没有具体的需求,不知道如何往下写了,有兴趣的朋友可以参考一下[/quote]

监控软件对比选择

运维 Rock 发表了文章 2 个评论 4144 次浏览 2016-01-03 04:18 来自相关话题

Cacti、Nagios、Zabbix功能对比   其他对比
Cacti、Nagios、Zabbix功能对比
function.png

 
其他对比
monitor_soft.png

浅谈开源工具自动化运维阶段

运维 Rock 发表了文章 1 个评论 6960 次浏览 2016-01-02 00:48 来自相关话题

前言 随着各种业务对IT的依赖性渐重以及云计算技术的普及,企业平均的IT基础架构规模正不断扩张。 有些Web 2.0企业可能会需要在两个星期内增加上千台服务器,因此对运维而言,通过手动来一个一个搭建的方法不仅麻烦、效率低下 ...查看全部


前言


随着各种业务对IT的依赖性渐重以及云计算技术的普及,企业平均的IT基础架构规模正不断扩张。
有些Web 2.0企业可能会需要在两个星期内增加上千台服务器,因此对运维而言,通过手动来一个一个搭建的方法不仅麻烦、效率低下,而且非常不利于维护和扩展。
即使是在传统的企业当中,日常的备份、服务器状态监控和日志,通过手动的方式来进行的效率也很低,是一种人力的浪费。因此,自动化早已是每个运维都必须掌握的看家本领。
在不同的企业中,自动化的规模、需求与实现方式都各不相同,因此在技术细节层面,运维之间很难将别的企业的方法整个套用过来。然而在很多情况下,自动化的思路是有共通之处的。


运维自动化前三阶段


    []纯手工阶段:手工操作重复地进行软件部署和运维;[/][]脚本阶段:通过编写脚本、方便地进行软件部署和运维;[/][]工具阶段:借助第三方工具高效、方便地进行软件部署和运维。[/]
 
这几个阶段是随着运维知识、经验、教训不断积累而不断演进的。而且,第2个阶段和第3个阶段可以说是齐头并进,Linux下的第三方工具虽说已经不少了,但是Linux下的脚本编写对运维工作的促进作用是绝对不可以忽视的。在DevOps出现之前,运维工作者在工作中还是以这两种方式为主。

Linux下好用的开源工具

1、预备类工具:Kickstart
kickstart安装是redhat开创的按照你设计好的方式全自动安装系统的方式。安装方式可以分为光盘、硬盘、和网络。
Cobbler
Cobbler是一个快速网络安装linux的服务,而且在经过调整也可以支持网络安装windows。该工具使用python开发,小巧轻便(才15k行代码),使用简单的命令即可完成PXE网络安装环境的配置,同时还可以管理DHCP,DNS,以及yum包镜像。
OpenQRM
openQRM提供开放的插件管理架构,你可用很轻松的将现有的数据中心应用程序集成到其中,比如Nagios和VMware。openQRM的自动化数据中心操作不但可用帮助你提高可用性,同时还可以降低您企业级数据中心的管理费用。针对数据中心管理的开源平台,针对设备的部署、监控等多个方面通过可插拔式架构实现自动化的目的,尤其面向云计算/基于虚拟化的业务。
Spacewalk
Spacewalk可管理Fedora、红帽、CentOS、SUSE与Debian Linux服务器。当你的数据中心拥有多台Linux服务器时,手动管理将不再是一个好的选择。Spacewalk就可以管理补丁、登录、更新。
 
[b]在自动化运维和大数据云计算时代实现预设自动化安装服务器环境、应用环境等不仅可以提高运维效率,而且还能大大减少运维的工作任务及出错概率。尤其是对于在服务器数量按几百台、几千台增加的公司而言,单单是装系统,如果不通过自动化来完成,其工作量和周期不可想象。[/b]
2、配置管理类工具:前浪:Chef
Chef是一个系统集成框架,可以用Ruby等代码完成服务器的管理配置并编写自己的库。
ControlTier
ControlTier是一个完全开放源码系统的自动化服务管理活动的多个服务器和多个应用层(代码,数据,配置和内容) 。共同使用的ControlTier包括部署应用程序,控制它们的状态,并运行按需行政工作在多个服务器上。ControlTier是跨平台和工程同样的物理服务器,虚拟机,或云计算基础设施。
Func
Func是由红帽子公司以Fedora统一网络控制器Func,目的是为了解决这一系列统一管理监控问题而设计开发的系统管理基础框架,它是一个能有效的简化我们众多服务器系统管理工作的工具,其具备容易学习,容易使用,更容易扩展;功能强大而且配置简单等优点。
Puppet
puppet是一个开源的软件自动化配置和部署工具,它使用简单且功能强大,正得到了越来越多地关注,现在很多大型IT公司均在使用puppet对集群中的软件进行管理和部署。
后浪SaltStack
Salt一种全新的基础设施管理方式,部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度够快,服务器之间秒级通讯。
Ansible
Ansible是新出现的运维工具是基于Python研发的糅合了众多老牌运维工具的优点实现了批量操作系统配置、批量程序的部署、批量运行命令等功能。
[b]在进行大规模部署时,手工配置服务器环境是不现实的,这时必须借助于自动化部署工具。[/b]
3、监控类工具Nagios
Nagios是一款免费的开源IT基础设施监控系统,其功能强大,灵活性强,能有效监控 Windows 、Linux、VMware 和 Unix 主机状态,交换机、路由器等网络设置等。一旦主机或服务状态出现异常时,会发出邮件或短信报警第一时间通知 IT 运营人员,在状态恢复后发出正常的邮件或短信通知。
OpenNMS
OpenNMS是一个网络管理应用平台,可以自动识别网络服务,事件管理与警报,性能测量等任务。
Cacti
Cacti是一套基于PHP、MySQL、SNMP及RRDTool开发的网络流量监测图形分析工具。它通过snmpget来获取数据,使用 RRDtool绘画图形,它的界面非常漂亮,能让你根本无需明白rrdtool的参数能轻易的绘出漂亮的图形。而且你完全可以不需要了解RRDtool复杂的参数。它提供了非常强大的数据和用户管理功能,可以指定每一个用户能查看树状结 构、host以及任何一张图,还可以与LDAP结合进行用户验证,同时也能自己增加模板,让你添加自己的snmp_query和script!功能非常强大完善,界面友好。
Zenoss Core
一个基于Zope应用服务器的应用/服务器/网络管理平台,提供了Web管理界面,可监控可用性、配置、性能和各种事件。
Zabbix
zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。用于监控网络上的服务器/服务以及其他网络设备状态的网络管理系统,后台基于C,前台由PHP编写,可与多种数据库搭配使用。提供各种实时报警机制。
Ganglia
Ganglia是一个针对高性能分布式系统(例如,集群、网格、云计算等)所设计的可扩展监控系统。该系统基于一个分层的体系结构,并能够支持2000个节点的集群。它允许用户能够远程监控系统的实时或历史统计数据,包括:CPU负载均衡、网络利用率等。Ganglia依赖于一个基于组播的监听/发布协议来监控集群的状态。Ganglia系统的实现综合了多种技术,包括:XML(数据描述)、XDR(紧凑便携式数据传输)、RRDtool(数据存储和可视化)等。
[b]数据监控和业务监控非常关键,及时发现问题,及时解决问题,监控系统主要包括:服务应用监控、主机监控、网络设备监控、网络连通性监控、网络访问质量监控、分布式系统监控、报警预设、监控图形化与历史数据等。[/b]
gongju.png

自动化对运维的意义

自动化就是运维为了减少重复枯燥的工作而建立的流程方法,而除此之外,自动化还能够带来减少人为错误、及时报警与故障恢复、提高业务可用性等好处。
运维工作自动化确实包含上述2个方面,归纳总结来其实就是:把零碎的工作集中化,把复杂的工作简单有序化,把流程规范化,最大化地解放生产力,也就是解放运维人员。
自动化的技能/意识对于运维工作至关重要。运维工作不是简单的使用工具,这里面还有很多技巧和意识。具体的技巧/意识包括:[list=1][]如何驾驭这些琳琅满目的工具为己所用;[/][]如何根据不同的应用环境来选用不同的工具;[/][]如何根据应用来组合使用工具等等等等。[/]
一定要记住一点:工具只是利用帮助人进行运维的,这中间还需要人的干预和决策,工具不能完全代替全部运维工作。还需要结合实际业务逻辑和业务场景,就像架构一样,并不是淘宝、百度等大公司的架构,一定适合任何公司和业务。

自动化运维范畴

    []安装自动化[/][]部署自动化[/][]监控自动化[/][]发布自动化[/][]升级自动化[/][]安全管控自动化[/][]优化自动化[/][]数据备份自动化[/]
前阶段在自动化管理和安全方面的技术实现,比如说HP和IBM出品的一些ITIL和ITSM产品等,比如HP Openview,IBM Tivoli等等。这些工具都有Linux的版本,与其他同类工具相比的优势应该在于他们的商业应用成熟度,都是老品牌。现阶段有自动化的一些工具git、svn、Jenkins等等,一些开源的软件!

工具选择

针对不同规模的架构,一个小规模的网站,到百万量级、千万量级的网站,我们选择的工具就有不同。
在选择上对于百万量级、千万量级的网站,我们应该考虑选择成熟的工具、性能高的工具、熟悉的工具。而对于小规模的网站,我们应该考虑选择一些开源的、免费的工具。
这个原则就是以应用为导向,百万量级、千万量级的网站牵涉的面广、要求高,不成熟的工具往往很难说服领导和公司使用,所以主要是在成熟度方面。

自动化运维规划

自动化的实现不是单纯学习几个工具就能够做好的,甚至于规划不好的情况,自动化不仅没有节省人力,反而带来了更多的问题。
所以运维人员在考虑自动化流程的过程中应该考虑如下几点原则:[list=1][]根据应用选择工具;[/][]对于关键应用,选择成熟度高的工具;[/][]不能过分依赖一种工具,需要进行对比和分析;[/][]对工具的特性做到精通;[/][]是人驾驭工具,人要监督工具,而不是工具来驾驭人;[/][]善于利用脚本实现定制化场景。[/]

自动化经验积累

[list=1][]经常逛逛一些不错的IT媒体网站和看看这方面的文章,可以多多涉猎和学习;[/][]针对公司业务场景,选择一些自动化工具,登陆到官网学习和熟悉工作原理;[/][]经常参加一些线下自动化运维的活动和媒体活动,多和一些自动化方面的大拿和资深人士交流。[/]

怎么彻底删除kafka的topic,然后重建?

大数据 Ansible 回复了问题 3 人关注 3 个回复 21733 次浏览 2017-08-23 20:25 来自相关话题

负载均衡LVS原理和应用详解

运维 push 发表了文章 1 个评论 4396 次浏览 2016-01-01 19:03 来自相关话题

一、LB常用解决方案 1. 硬件负载均衡解决方案: []F5公司: BIG-IP[/][]Citrix公司: Netscaler[/][]A10公司: A10[/][]Array [/][]Redware[/]2. Lin ...查看全部


一、LB常用解决方案


1. 硬件负载均衡解决方案:
    []F5公司: BIG-IP[/][]Citrix公司: Netscaler[/][]A10公司: A10[/][]Array [/][]Redware[/]
2. Linux: LVS[list=1]
  • 完成Linux Virtual Server作者 (章文嵩,花名段正明)
  • [list=1]
  • ipvs工作于netfilter框架上
  • [list=1]
  • ipvs: 框架,工作在内核中,工作在input链上,需要依赖于规则完成转发。 如果发现发往本机INPUT链的请求,如果能匹配到集群规则,直接转发至post-routing链发出主机。 
  • [list=1]
  • 规则: 简单来说就是把ip加端口定义为ipvs集群服务,ipvs会为此请求定义一个或多个后端服务目标地址未必会改,但是报文会被强行转发给后端的服务器。 
  • [list=1]
  • ipvs组件: ipvsadm(用户空间,用来编写规则) + ipvs(内核空间) 
  • [list=1]
  • ipvs工作在第四层: 
  •      1) 成为四层交换、四层路由。 做第四层转发。     2) 只能基于ip和port转发,无法在应用层,session级别转发     3) 不用到达应用层空间,就能转发[list=1]
  • lvs 性能很好,但是由于只第四层,不能到用户空间,因此不能进行更加精细的控制。 在精细控制方面,haproxy和Ngnix可以更好的实现。 
  • [list=1]
  • lvs通常作为总入口,更精细化的切割可能使用,haproxy或者Nginx实现 
  • [list=1]
  • 报文的信息流: CIP<–>VIP–DIP<–>RIP

  •      1) CIP: Client ip 

         2) VIP: virtual ip 

         3) DIP: Director IP 

         4) RIP: Real server Ip 

         客户端请求,被VIP端口接收后,从DIP接口被转发出去,并转发至RIP


    二、LVS类型


    1. NAT(dNAT)
        访问过程如下:

                1) CIP访问VIP 

                2) VIP接收报文后,做dNAT,指向某一个RIP 

                3) RIP拿到接收到报文后进行回应

                4) 此时需要,RIP网关指向DIP,也就是Director server. 否则若在互联网上,即便报文是可以回应给CIP客户端,但是由于CIP并没有请求RIP服务器,因此报文会被丢弃。 

            NAT特性:

                1) RS应该使用私有地址

                2) RS的网关必须指向DIP 

                3) RIP 和 DIP 必须在一同意网段内

                4) 进出的报文,无论请求还是响应,都必须经过Director Server, 请求报文由DS完成目标地址转换,响应报文由DS完成源地址转换 

                5) 在高负载应用场景中,DS很可能成为系统性能瓶颈。 

                6) 支持端口映射。

                7) 内部RS可以使用任意支持集群服务的任意操作系统。
    lvs_nat.png

     
     2. DR 
    1)让前端路由将请求发往VIP时,只能是Dirctor上的VIP
         禁止RS响应对VIP的ARP广播请求:
                (1) 在前端路由上实现静态MAC地址VIP的绑定;

                    前提:得有路由器的配置权限;

                    缺点:Directory故障转时,无法更新此绑定;

                (2) arptables

                    前提:在各RS在安装arptables程序,并编写arptables规则

                    缺点:依赖于独特功能的应用程序

                (3) 修改Linux内核参数

                    前提:RS必须是Linux;

                    缺点:适用性差; 

        Linux的工作特性:IP地址是属于主机,而非某特定网卡;也就是说,主机上所有的网卡都会向外通告,需要先配置参数,然后配置IP,因为只要IP地址配置完成则开始想外通告mac地址为了使响应报文由配置有VIP的lo包装,使源地址为VIP,需要配置路由经过lo网卡的别名,最终由eth0发出

                 两个参数的取值含义:

                        arp_announce:定义通告模式

                            0: default, 只要主机接入网络,则自动通告所有为网卡mac地址

                            1: 尽力不通告非直接连入网络的网卡mac地址

                            2: 只通告直接进入网络的网卡mac地址

                        arp_ignore:定义收到arp请求的时响应模式

                            0: 只有arp 广播请求,马上响应,并且响应所有本机网卡的mac地址

                            1: 只响应,接受arp广播请求的网卡接口mac地址

                            2: 只响应,接受arp广播请求的网卡接口mac地址,并且需要请求广播与接口地址属于同一网段

                            3: 主机范围(Scope host)内生效的接口,不予响应,只响应全局生效与外网能通信的网卡接口

                            4-7: 保留位

                            8: 不响应一切arp广播请求
        配置方法: 

                        全部网卡

                            arp_ignore 1

                            arp_announce 2 

                        同时再分别配置每个网卡,eth0和lo

                            arp_ignore 1

                            arp_annource 2

    2) 特性
       (1)RS是可以使用公网地址,此时可以直接通过互联网连入,配置,监控RS服务器
       (2)RS的网不能指向DIP
       (3)RS跟DS要在同一物理网络内,最好在一同一网段内
       (4)请求报文经过Director但是相应报文不经过Director
       (5)不支持端口映射
       (6)RS可以使用,大多数的操作系统,至少要可以隐藏VIP
    lvs_dr_1.png

    lvs_dr_2.png

    3. LVS TUN: IP隧道,IP报文中套IP报文 
            1)RIP,DIP,VIP都必须是公网地址

            2)RS网关不会指向DIP

            3)请求报文经过Director,但相应报文一定不经过Director

            4)不支持端口映射

            5)RS的OS必须得支持隧道功能
    lvs_lun.png

     4. FULLNAT: 必须内核打补丁才能使用,使得各RS主机可以跨vlan. 源IP和目标IP都修改
    full_nat.png


    三、LVS调度算法


    1. 静态方法:仅根据算法本身进行调度

            rr: Round Robin

            wrr: Weighted RR

            sh: source hashing,源地址进行hash,然后分配到特定的服务器

            dh: destination hashing

                用于多前端防火墙的场景中,使得访问从一个防火墙进同时还从这个防火墙出来。 

    2. 动态方法:根据算法及RS当前的负载状况

            lc: Least Connection

                Overhead=Active*256+Inactive

                结果中,最小者胜出;

            wlc: Weighted LC

                Overhead=(Active*256+Inactive)/weight

            sed: Shortest Expect Delay

                Overhead=(Active+1)*256/weight

            nq: Nerver Queue,在Sed基础上,开局时候先轮寻一圈。 

            lblc: Locality-based Least Connection (基于本地的最小连接) dh+lc

            lblcr: Replicated and Locality-based Least Connection 后端服务器是缓存服务器时, 可以绑定连接到某一缓存服务器中。

    3. LVS缺陷: 

        不能检测后端服务器的健康状况,总是发送连接到后端。 

        Session持久机制:

            1、session绑定:始终将同一个请求者的连接定向至同一个RS(第一次请求时仍由调度方法选择);没有容错能力,有损均衡效果;

            2、session复制:在RS之间同步session,因此,每个RS持集群中所有的session;对于大规模集群环境不适用;

            3、session服务器:利用单独部署的服务器来统一管理session; 


    四、ipvsadm使用方法


    1.相关命令
    ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask]    
    ipvsadm -D -t|u|f service-address
    ipvsadm -C
    ipvsadm -R
    ipvsadm -S [-n]
    ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower]
    ipvsadm -d -t|u|f service-address -r server-address
    ipvsadm -L|l [options]
    ipvsadm -Z [-t|u|f service-address]
     2. 集群服务相关
        -A: 添加一个集群服务
    -t: tcp
    -u: udp
    -f: firewall mark,
    通常用于将两个或以上的服务绑定为一个服务进行处理时使用
    例如httpd和https
    iptables mongo表一起使用

    service-address:
    -t IP:port
    -u ip:port
    -f firewall_mark

    -s 调度方法,默认为wlc
    -p timeout: persistent connection, 持久连接
    -E 修改定义过的集群服务
    -D -t|u|f service-address:删除指定的集群服务
     3. RS相关
            -a:向指定的Cluster services中添加RS
    -t|-u|-f service-address:指明将RS添加至哪个Cluster Service中
    -r: 指定RS,可包含{IP[:port]},只有支持端口映射的LVS类型才允许此处使用跟集群服务中不同的端口
    LVS类型:
    -g: Gateway模式,就是DR模型(默认)
    -i: ipip模式,TUN模型
    -m: masquerade地址伪装自动完成后半段的原地址转换,NAT
    指定RS权重:
    -w # 省略权重为1
    -e: 修改指定的RS属性
    -d -t|u|f service-address -r server-address:从指定的集群服务中删除某RS
    4. 清空所有的集群服务:
    -C
    5. 保存规则:(使用输出重定向)
    ipvsadm-save 
    ipvsadm -S
    6. 载入指定的规则:(使用输入重定向)
    ipvsadm-restore
    ipvsadm -R
     7. 查看ipvs规则等
        -L [options]
    -n: 数字格式显示IP地址
    -c: 显示连接数相关信息
    --stats: 显示统计数据
    --rate: 速率
    --exact:显示统计数据的精确值
    --timeout: 超时时间
    -Z: 计数器清零


    五、LVS NAT模型的实现


    [list=1]
    [*]集群环境: 一台Director, 两台后端Real Server RS1,RS2
        Director: 两网卡    [/*]
    [/list] eth0: 192.168.98.133/24
    eth1: 172.25.136.10/24
    eth0:1: 192.168.98.128/24 作为VIP地址

    RS1:
    eth0: 172.25.136.11

    RS2:
    eth0: 172.25.136.12;
        Director的eth1和RS1,RS2的eth0在模拟在同一物理网络内,使用VMnet2    
    物理机windows 7 作为客户端,在192.168.98.0网络内
    2. 为RS添加网关指向Director
        RS1:    
    # ifconfig eth0 172.25.136.11/24
    # route add default gw 172.25.136.10
    RS2:
    # ifconfig eth0 172.25.136.12/24
    # route add default gw 172.25.136.10
    添加完路由条目后,应该可以ping通Director 192.168.98.0网段的两个地址。
    3. 修改内核参数,开启转发功能
    # echo 1 > /proc/sys/net/ipv4/ip_forward
     4. 在RS1和RS2上面创建测试页,并在Director验证服务
        RS1上
    # echo 'web from RS1' > /var/www/html/index.html
    # service httpd start
    RS2上
    # echo 'web from RS2' > /var/www/html/index.html
    # service httpd start
    Director上验证
    # curl 172.25.136.11
    web from RS1
    # curl 172.25.136.12
    web from RS2
    5. 在Director添加集群服务
        # ipvsadm -A -t 192.168.98.128:80 -s wlc    
    # ipvsadm -a -t 192.168.98.128:80 -r 172.25.136.11:80 -m -w 1
    # ipvsadm -a -t 192.168.98.128:80 -r 172.25.136.12:80 -m -w 3
    6. 通过物理机浏览器访问192.168.98.128, 正常情况,就可以看到轮寻的两个RS的主页了。 
        访问几次后,查看统计数据如下,大概接入报文比例3:1, 说明wlc生效了    
    # ipvsadm -L --stats
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
    -> RemoteAddress:Port
    TCP 192.168.98.128:http 45 227 227 32215 19245
    -> 136-11.priv25.nus.edu.sg:htt 12 62 62 8571 6055
    -> 136-12.priv25.nus.edu.sg:htt 33 165 165 23644 13190


    六、LVS DR模型,当DIP,VIP,RIP都为公网地址时(实验环境中,把这三个地址全部放在同一物理网络中)


    [list=1]
    [*]地址规划:
        Director:     [/*]
    [/list] eth0: 192.168.98.133 作为ssh通信地址
    eth0:1: 192.168.98.128 作为VIP, 可以进行浮动
    RS1:
    eth0: 192.168.98.129/24 作为RIP1
    lo:1 : 192.168.98.128 作为隐藏的VIP
    RS1:
    eth0: 192.168.98.130 作为RIP2
    lo:2: 192.168.98.128 作为隐藏VIP
     2. 配置地址 
        Director: 
    # ifconfig eth0 192.168.98.133/24 up
    # ifconfig eth0:1 192.168.98.128/24 up
    RS1
    # ifconfig eth0 192.168.98.129/24 up
    RS2
    # ifconfig eth0 192.168.98.130/25 up
    3. 修改RS1,RS3的内核参数,关闭lo的arp通告和lo的arp响应,并配置隐藏地址
        RS1: 
    # echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
    # echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
    # echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
    # echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
    设置RS1的隐藏VIP地址, 并禁止其向外发广播
    # ifconfig lo:1 192.168.98.128 netmask 255.255.255.255 broadcast 192.168.98.128
    RS2:
    # echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
    # echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
    # echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
    # echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
    设置RS2的隐藏VIP地址,并禁止其向外发广播
    # ifconfig lo:1 192.168.98.128 netmask 255.255.255.255 broadcast 192.168.98.128
    4. 为RS1和RS2添加路由条目,保证其发出报文经过eth0之前,还要先经过lo:1 VIP, 使得源地址成为VIP
        RS1:     
    # route add 192.168.98.128 dev lo:1
    RS2:
    # route add 192.168.98.128 dev lo:1
    5. 此时在Director上面添加,集群服务
        # ipvsadm -A -t 192.168.98.128:80 -s wlc    
    # ipvsadm -a -t 192.168.98.128:80 -r 192.168.98.129:80 -g -w 1
    # ipvsadm -a -t 192.168.98.128:80 -r 192.168.98.130:80 -g -w 3


    七、LVS持久连接


    [list=1]
    [*]PCC:将来自于同一个客户端发往VIP的所有请求统统定向至同一个RS
        可以通过修改轮寻算法为sh算法实现[/*]
    [/list] # ipvsadm -E -t 192.168.98.128:80 -s sh
    [root@www ~]# curl 192.168.98.128
    eb from RS2
    [root@www ~]# curl 192.168.98.128
    web from RS2
    [root@www ~]# curl 192.168.98.128
    web from RS2
    [root@www ~]# curl 192.168.98.128
    web from RS2
    [root@www ~]# curl 192.168.98.128
    web from RS2
    [root@www ~]# curl 192.168.98.128
    web from RS2
     2. PPC:将来自于一个客户端发往某VIP的某端口的所有请求统统定向至同一个RS;

    [list=1]
    [*]PFMC: 端口绑定,port affinity, 基于防火墙标记,将两个或以上的端口绑定为同一个服务
        防火墙打标记[/*]
    [/list] # iptables -t mangle -A PREROUTING -d VIP -p tcp --dport CS_Port -j MARK --set-mark # (0-99)
    定义集群服务:
    # ipvsadm -A -f #(防火墙打的标记)
    转载阅读,原文地址:负载均衡LVS原理及其应用

    怎么查看kafka的版本号

    大数据 OpenSkill 回复了问题 2 人关注 1 个回复 14477 次浏览 2016-10-26 21:37 来自相关话题

    连竞争对手的新闻稿都照抄的公司你听说过吗?

    科技前沿 Geek小A 发表了文章 5 个评论 12498 次浏览 2015-12-22 18:25 来自相关话题

    闲来无事,看看创业抄袭体 在中国做产品,有的人抄源码,有的人抄UI,有的人抄功能,现在竟然还有人连竞争对手的新闻稿都要抄袭!而这么没品的事情,竟然是一家号称要做中国的Oracle的公司干出来的,待我细说端详。事情的起因是酱紫的,我在一 ...查看全部


    闲来无事,看看创业抄袭体


    在中国做产品,有的人抄源码,有的人抄UI,有的人抄功能,现在竟然还有人连竞争对手的新闻稿都要抄袭!而这么没品的事情,竟然是一家号称要做中国的Oracle的公司干出来的,待我细说端详。
    事情的起因是酱紫的,我在一家电子商务公司负责移动端,因为产品接了很多第三方API,如友盟的统计,微信的登陆,百度的定位,还有支付宝和银联的支付,所以一直在用监控宝API监控功能。前段时间监控宝对这个功能进行产品升级,所以特别关注了一下这块内容。
    云智慧官方微信文章
    hack1.png
    恰好AWS宣布要正式进军国内,在看新闻的时候发现搜狐上有一篇关于API的文章《透过 AWS 峰会看未来 API 监控市场》(http://mt.sohu.com/20151218/n431798253.shtml ),顺手点进去,天啦撸,竟然跟前几天监控宝的微信文章一模一样,顺藤摸瓜,在这家叫OneAPM的公司官网上也找到了这篇文章(http://news.oneapm.com/aws-api/ )。
    OneAPM搜狐自媒体平台文章列表
    hack2.png

    OneAPM官网文章列表
    hack3.png


    下面就让我们看看这两篇几乎一样的文章


    云智慧官方微信文章截图如下:
    hack5.png

    OneAPM官网文章截图如下:
    hack6.png
    监控宝文章开篇在讲API生态的发展历程和典型API方案架构,而OneAPM开篇先抱AWS大腿,随后开抄,因为监控宝的两张配图有明显水印,所以图片不见了,但文字就显得莫名其妙。
    hack7.png
    第二段讨论国内API监控发展的内容,继续全文照抄,只是把最后的云智慧监控宝替换成OneAPM。
    hack8.png
    后面两段关于监控宝“API监控原理”和“API监控新版介绍”的内容 ,因为涉及监控宝API可用性和响应时间策略,所以OneAPM进行了大篇幅的删减,只保留了一张还带着云智慧微信残缺水印的API通信原理图和少量文字,最后一段监控宝产品使用估计抄袭难度太大,所以也得以幸免。
    hack9.png
    既然连新闻稿都要抄袭,产品是不是也是抄的呢,本着生命不息,八卦不止的精神,上百度搜索“OneAPM 抄袭”,果然看到一个扒皮贴和一篇扒皮文章。先来看看V2EX上的扒皮帖子(链接:http://www.v2ex.com/t/125736):
    hack10.png
    有人(目测是OneAPM的托)在V2EX发帖说OneAPM家的Python Agent好用,然后网友留言“其实就是 NewRelic 的汉化版嘛”,于是@dreampuf 、@vvvboy认真比较了OneAPM和NewRelic的Agent代码,竟然又是一模一样。
    hack11.png

    hack12.png
    OneAPM的人先是拒不承认抄袭,被扒皮后又说产品开源的目的就是为了让人抄,实在是“见仁见智”。对了,他们还在媒体上说《Blueware何晓阳,不做中国的New Relic》(CSDN专访:http://www.csdn.net/article/2014-07-10/2820605-APM-Software-Service )。
    接着看到另一篇《OneAPM何晓阳的美丽人生》(http://news.3news.cn/html/news/cj/2015/0813/23053.html ),原来抄袭只是OneAPM的一项技能,他们还Get了好多Duang~Duang~Duang~的特技:吹牛逼、客户造假、数据造假、融资夸大。
    看到这里,至少我是不敢把纯粹抄来的玩意往我家产品里接的,万一出了啥问题,你又搞不定,算谁的?!


    结语


    我是流氓我怕谁,创客时代,不少创业者,创业公司不择方法。抄袭已经很常见了,很值得思考。
    风口上的猪,希望是一只正直、实在、努力的猪。不希望是懒惰、抄袭、拿来主义者。

    Python input和raw_input的区别

    编程 空心菜 发表了文章 1 个评论 4315 次浏览 2015-12-14 23:18 来自相关话题

    使用input和raw_input都可以读取控制台的输入,但是input和raw_input在处理数字时是有区别的 纯数字输入 当输入为纯数字时 []input返回的是数值类型,如int,floa ...查看全部
    使用input和raw_input都可以读取控制台的输入,但是input和raw_input在处理数字时是有区别的


    纯数字输入


    当输入为纯数字时
      []input返回的是数值类型,如int,float[/][]raw_inpout返回的是字符串类型,string类型[/]

    cb.png


    输入字符串为表达式


    input会计算在字符串中的数字表达式,而raw_input不会。
    如输入 "57 + 3":
    input会得到整数60
    raw_input会得到字符串"57 + 3"
    cb1.png

    输入字符串结果如下:
    cb3.png

    通过上面的实验我们知道input它会根据用户输入变换相应的类型,而且如果要输入字符和字符串的时候必须要用引号包起来,而raw_input则是不管用户输入什么类型的都会转变成字符型.


    python input的实现


    python input的文档,你可以发现input其实是通过raw_input来实现的,原理很简单,就下面一行代码:
    def input(prompt):
    return (eval(raw_input(prompt)))