Month December 2017

Do you need a CMDB for cloud-based systems?

Cloud computing is traveling along the hype cycle quickly, cloud technologies are maturing, and cloud adoption is accelerating on a global scale. Most IT managers now agree that cloud computing is both a new generation of system architecture and also…

mysql中engine=innodb和engine=myisam的区别

1/ISAM ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到数据库被查询的次数要远大于更新的次数。因此,ISAM执行读取操作的速度很快,而且不占用大量的内存和存储资源。ISAM的两个主要不足之处在于,它不支持事务处理,也不能够容错:如果你的硬盘崩溃了,那么数据文件就无法恢复了。如果你正在把ISAM用在关键任务应用程序里,那就必须经常备份你所有的实时数据,通过其复制特性,MySQL能够支持这样的备份应用程序。 2/InnoDB 它提供了事务控制能力功能,它确保一组命令全部执行成功,或者当任何一个命令出现错误时所有命令的结果都被回退,可以想像在电子银行中事务控制能力是非常重要的。支持COMMIT、ROLLBACK和其他事务特性。最新版本的Mysql已经计划移除对BDB的支持,转而全力发展InnoDB。 MyIASM是IASM表的新版本,有如下扩展: 二进制层次的可移植性。 NULL列索引。 对变长行比ISAM表有更少的碎片。 支持大文件。 更好的索引压缩。 更好的键吗统计分布。 更好和更快的auto_increment处理。 以下是一些细节和具体实现的差别: 1.InnoDB不支持FULLTEXT类型的索引。 2.InnoDB中不保存表的 具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的。 3.对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。 4.DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。 5.LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。 另外,InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “�a%” 任何一种表都不是万能的,只用恰当的针对业务类型来选择合适的表类型,才能最大的发挥MySQL的性能优势. MySQL Administrator建数据库的时候,表缺省是InnoDB类型。 InnoDB,MyISAM…

MySql:charset和collation的设置

MySql:charset和collation的设置   charset 和 collation 有多个级别的设置:服务器级、数据库级、表级、列级和连接级 www.2cto.com 1.服务器级 查看设置:show global variables like ‘character_set_server’; 和 show global variables like ‘collation_server’; 修改设置:在OPTION FILE ( [mysqld] character_set_server=utf8 collation_server=utf8_general_ci   2. 数据库级 查看设置:select * from information_schema.schemata where schema_name = ‘cookbook’; 设置: 1.若没有显式设置,则自动使用服务器级的配置 2.显式设置:在创建库时指定 create…

基于Docker持续交付平台建设的实践

作为创业公司和推行DevOps工程师们来说,都遇到过这样的问题: 硬件资源利用率的问题,造成部分成本的浪费 在网站功能中不同的业务场景有计算型的,有IO读写型的,有网络型,有内存型的,集中部署应用就会导致资源利用率不合理的问题。比如,一个机器上部署的服务都是内存密集型,那么CPU资源就都很容易浪费了。 单物理机多应用无法对无法进行有效的隔离,导致应用对资源的抢占和相互影响 一个物理机器跑多个应用,无法进行所使用的CPU,内存,进程进行限制,如果一个应用出现对资源的抢占问题,就会引起连锁反应,最终导致网站部分功能不可用。 环境、版本管理复杂,上线部署流程缺乏,增加问题排查的复杂度 由于内部开发流程的不规范,代码在测试或者上线过程中,对一些配置项和系统参数进行随意的调整,在发布时进行增量发布,一旦出现问题,就会导致测试的代码和线上运行的代码是不一致的,增加了服务上线的风险,也增加了线上服务故障排查的难度。 环境不稳定,迁移成本高,增加上线风险 在开发过程中存在多个项目并行开发和服务的依赖问题,由于环境和版本的复杂性很高,不能快速搭建和迁移一个环境,导致无法在测试环境中无法模拟出线上的流程进行测试,很多同学在线上环境进行测试,这里有很高的潜在风险,同时导致开发效率降低。 传统虚拟机和物理机占用空间大,启动慢,管理复杂等问题 传统虚拟机和物理机在启动过程进行加载内核,执行内核和init进行,导致在启动过程占用很长时间,而且在管理过程中会遇到各种各样的管理问题。 基于Docker容器技术,运维技术团队开发了五阿哥网站的容器云平台。通过容器云平台95%的应用服务已经实现容器化部署。这些应用支持业务按需拓展,秒级伸缩,提供与用户友好的交互过程,规范了测试和生产的发布流程,让开发和测试同学从基础的环境配置和发布解放出来,使其更聚焦自己的项目开发和测试。结合五阿哥容器云平台和Docker容器技术的实践,本文先介绍如何实现724小时“一站式”的持续交付,实现产品的上线。 *容器云平台架构图 Docker镜像标准化 众所周知,Docker的镜像是分层的。对镜像分层进行约定: 第一层是操作系统层,由CentOS/Alpine等基础镜像构成,安装一些通用的基础组件; 第二层是中间件层,根据不同的应用程序,安装它们运行时需要使用到的各种中间件和依赖软件包,如,Nginx、Tomcat等; 第三层是应用层,这层仅包含已经打好包的各应用程序代码。 Docker Image分层 经验总结:如何让自己的镜像变的更小,PUSH的更快? Docker Image优化前后对比 Dockerfile构建应用镜像,在中间件层遇到一些需要安装的软件包时,尽可能的使用包管理工具(如yum)或以git clone方式下载源码包进行安装,目的是将软件包的copy和安装控制在同一层,软件部署成功后清除一些无用的rpm包或源码包,让基础镜像的尺寸更小。 Java应用镜像中并没有将JDK软件包打入镜像,将JDK部署在每台宿主上,在运行镜像时,通过挂载目录的方式将宿主机上的Java家目录挂载至容器指定目录下。因为它会把基础镜像撑得非常大。 在构建应用镜像时,Docker会对这两层进行缓存并直接使用,仅会重新创建代码出现变动的应用层,这样就提高了应用镜像的构建速度和构建成功后向镜像仓库推送的速度,从整体流程上提升了应用的部署效率。   容器的编排管理 编排工具的选型: Docker编排工具对比 Rancher图形化管理界面,部署简单、方便,可以与AD、LDAP、GitHub集成,基于用户或用户组进行访问控制,快速将系统的编排工具升级至Kubernetes或者Swarm,同时有专业的技术团队进行支持,降低容器技术入门的难度。 Rancher架构图 基于以上优点我们选择Rancher作为我们容器云平台的编排工具,在对应用的容器实例进行统一的编排调度时,配合Docker-Compose组件,可以在同一时间对多台宿主机执行调度操作。同时,在服务访问出现峰值和低谷时,利用特有的rancher-compose.yml文件调用“SCALE”特性,对应用集群执行动态扩容和缩容,让应用按需求处理不同的请求。 容器网络模型选型: Docker 网络对比 由于后端开发基于阿里的HSF框架,生产者和消费者之间需要网络可达,对网络要求比较高,需要以真实IP地址进行注册和拉取服务。所以在选择容器网络时,我们使用了Host模式,在容器启动过程中会执行脚本检查宿主机并分配给容器一个独立的端口,来避免冲突的问题。 持续集成与持续部署 持续集成,监测代码提交状态,对代码进行持续集成,在集成过程中执行单元测试,代码Sonar和安全工具进行静态扫描,将结果通知给开发同学同时部署集成环境,部署成功后触发自动化测试(自动化测试部分后续会更新)。…

使用Spring Cloud和Docker构建微服务

【编者的话】这是系列博文中的第一篇,本文作者使用Spring Cloud和Docker构建微服务平台,文章的例子浅显易懂。 本系列博文主要向大家介绍如何使用Spring Cloud和Docker构建微服务平台。 什么是Spring Cloud? Spring Cloud 是Pivotal提供的用于简化分布式系统构建的工具集。Spring Cloud引入了云平台连接器(Cloud Connector)和服务连接器(Service Connector)的概念。云平台连接器是一个接口,需要由云平台提供者进行实现,以便库中的其他模块可以与该云平台协同工作。(更多介绍,可以阅读InfoQ的报道。) 在Spring Cloud提供的解决方案中,你将会发现如下的内容: Configuration Service Discovery Service Circuit breakers Distributed sessions   Spring Boot Spring Cloud最重要的一点是它可以和Spring Boot一起工作,Spring Boot可以帮助开发者更容易地创建基于Spring的应用程序和服务。 从Spring Boot项目名称中的Boot就可以看出来,Spring Boot的作用在于创建和启动新的基于Spring框架的项目。Spring Boot会选择最适合的Spring子项目和第三方开源库进行整合。大部分Spring Boot应用只需要非常少的配置就可以快速运行起来。Spring Boot包含的特性如下: 创建可以独立运行的Spring应用。 直接嵌入Tomcat或Jetty服务器,不需要部署WAR文件。 提供推荐的基础POM文件来简化Apache Maven配置。 尽可能的根据项目依赖来自动配置Spring框架。 提供可以直接在生产环境中使用的功能,如性能指标、应用信息和应用健康检查。…

微服务架构的基础框架选择:Spring Cloud还是Dubbo?

最近一段时间不论互联网还是传统行业,凡是涉及信息技术范畴的圈子几乎都在讨论微服务架构。近期也看到各大技术社区开始组织一些沙龙和论坛来分享Spring Cloud的相关实施经验,这对于最近正在整理Spring Cloud相关套件内容与实例应用的我而言,还是有不少激励的。 目前,Spring Cloud在国内的知名度并不高,在前阵子的求职过程中,与一些互联网公司的架构师、技术VP或者CTO在交流时,有些甚至还不知道该项目的存在。可能这也与国内阿里巴巴开源服务治理框架Dubbo有一定的关系,除了Dubbo本身较为完善的中文文档之外,不少科技公司的架构师均出自阿里系,所以就目前情况看,短期国内还是Dubbo的天下。 那么第一次实施微服务架构时,我们应该选择哪个基础框架更好呢? 以下内容均为作者个人观点,知识面有限,如有不对,纯属正常,不喜勿喷。 Round 1:背景 Dubbo,是阿里巴巴服务化治理的核心框架,并被广泛应用于阿里巴巴集团的各成员站点。阿里巴巴近几年对开源社区的贡献不论在国内还是国外都是引人注目的,比如:JStorm捐赠给Apache并加入Apache基金会等,为中国互联网人争足了面子,使得阿里巴巴在国人眼里已经从电商升级为一家科技公司了。 Spring Cloud,从命名我们就可以知道,它是Spring Source的产物,Spring社区的强大背书可以说是Java企业界最有影响力的组织了,除了Spring Source之外,还有Pivotal和Netfix是其强大的后盾与技术输出。其中Netflix开源的整套微服务架构套件是Spring Cloud的核心。 小结:如果拿Dubbo与Netflix套件做对比,前者在国内影响力较大,后者在国外影响力较大,我认为在背景上可以打个平手;但是若要与Spring Cloud做对比,由于Spring Source的加入,在背书上,Spring Cloud略胜一筹。不过,英雄不问出处,在背景这一点上,不能作为选择框架的主要因素,当您一筹莫展的时候,可以作为参考依据。 Round 2:社区活跃度 我们选择一个开源框架,社区的活跃度是我们极为关注的一个要点。社区越活跃,解决问题的速度越快,框架也会越来越完善,不然当我们碰到问题,就不得不自己解决。而对于团队来说,也就意味着我们不得不自己去维护框架的源码,这对于团队来说也将会是一个很大的负担。 下面看看这两个项目在github上的更新时间,下面截图自2016年7月30日: Dubbo : 最后更新时间为:2016年5月6日 Spring Cloud : 最后更新时间为:12分钟前 可以看到Dubbo的更新已经是几个月前,并且更新频率很低。而Spring Cloud的更新是12分钟前,仍处于高速迭代的阶段。 小结:在社区活跃度上,Spring Cloud毋庸置疑的优于Dubbo,这对于没有大量精力与财力维护这部分开源内容的团队来说,Spring Cloud会是更优的选择。 Round 3:架构完整度 或许很多人会说Spring Cloud和Dubbo的对比有点不公平,Dubbo只是实现了服务治理,而Spring Cloud下面有17个子项目(可能还会新增)分别覆盖了微服务架构下的方方面面,服务治理只是其中的一个方面,一定程度来说,Dubbo只是Spring…

不错的linux下通用的java程序启动脚本(转载)

  虽然写起动shell的频率非常不高。。。但是每次要写都要对付一大堆的jar文件路径,新加jar包也必须要修改起动shell。 在网上找到一个挺好的通用shell脚本。 只需要修改一些配置变量,就可以用来做起动脚本了。 并且除了能起动、还支持关闭、重启、查看是否正在运行的功能。 原文地址: start函数中,nohup部分其实也可以提出来放入一个配置变量中。这里没有修改直接贴上作者的原文 #!/bin/sh #该脚本为Linux下启动java程序的通用脚本。即可以作为开机自启动service脚本被调用, #也可以作为启动java程序的独立脚本来使用。 # #Author: tudaxia.com, Date: 2011/6/7 # #警告!!!:该脚本stop部分使用系统kill命令来强制终止指定的java程序进程。 #在杀死进程前,未作任何条件检查。在某些情况下,如程序正在进行文件或数据库写操作, #可能会造成数据丢失或数据不完整。如果必须要考虑到这类情况,则需要改写此脚本, #增加在执行kill命令前的一系列检查。 # # ################################### #环境变量及程序执行参数 #需要根据实际环境以及Java程序名称来修改这些参数 ################################### #JDK所在路径 JAVA_HOME=”/usr/java/jdk” #执行程序启动所使用的系统用户,考虑到安全,推荐不使用root帐号 RUNNING_USER=root #Java程序所在的目录(classes的上一级目录) APP_HOME=/opt/tudaxia/test/WEB-INF #需要启动的Java主程序(main方法类) APP_MAINCLASS=com.tudaxia.test.TestMain #拼凑完整的classpath参数,包括指定lib目录下所有的jar CLASSPATH=$APP_HOME/classes for i in…

sql server几种读写分离方案的比较

在生产环境中我们经常会遇到这种情况: 前端的oltp业务很繁忙,但是需要对这些运营数据进行olap,为了不影响前端正常业务,所以需要将数据库进行读写分离。 这里我将几种可以用来进行读写分离的方案总结一下,这里并不考虑数据库是否高可用,只针对读写分离场景,方案本身并无优劣可言,只看是否适合业务使用场景,所以只把几个方案的特点罗列出来,遇到具体的问题时按自己需求和环境综合考虑后再进行取舍   读写分离方案 实时同步 副本数据是否直接可读 副本数 最小粒度 副本建立索引 环境 缺点 镜像 是 否(需要开启快照,只读) 1 库 否 域/非域(使用证书) 在高安全模式下对主库 性能有一定影响 log shipping 否 是(只读) N 库 否 UNC方式可访问 副本库在做resotre时会断开已连接用户连接/可能影响常规日志备份 发布订阅 是 是(读写,但写可能会产生数据不一致) N 表(查询) 是 域/非域 在主库上有大量DML操作时,对分发服务器会有一定影响,且订阅数据库可能有数据同步延迟 always on…

zabbix系列(五)zabbix3.0.4 探索主机Discovery自动发现agent主机和zabbix-agent自动注册详细图文教程

Zabbix 自动发现(Discovery)功能使用 随着监控主机不断增多,有的时候需要添加一批机器,特别是刚用zabbix的运维人员需要将公司的所有服务器添加到zabbix,如果使用传统办法去单个添加设备、分组、项目、图像…..结果应该是让人吐的结果。 鉴于这个问题我们可以好好利用下Zabbix的一个发现(Discovery)模块,进而来实现自动刚发现主机、自动将主机添加到主机组、自动加载模板、自动创建项目(item)、自动创建图像,下面我们来看看这个模块如何使用。 一、Zabbix 创建发现规则创建发现规则Configuration —- discovery —- Create discovery rule 配置基本信息  配置Checks  添加完checks之后 点击最下面的add添加保存即可 OK 规则已经创建完毕了 下面开始让他自动加入到组自动创建图形吧 二、主机自动加入主机组并关联模板 上面我们了解了如何自动发现主机,那么发现主机之后我们要做什么呢? 将主机加入主机组、并关联相应的模板!这样一整个流程就完善了,那么如何做呢?我们上面已经发现了主机 接下来要对主机做操作 所以需要一个action (动作)来执行一些列的操作,下面我们来看具体操作。 2.1、为discovery(发现)创建action(动作)Configuration —- Actions —- Event source(选择Discovery) —- Create action 2.1.1、输入 Action 名字 2.1.2、添加触发Action的条件  这里添加了三个条件 分别是…

zabbix执行远程命令(41)

概述 监控,有的人只把他当做报警使用,出现问题之后打开跑回家打开电脑,巴拉巴拉的处理掉,大多数时候都是一些小问题,为何不让zabbix帮你把这些事情处理掉呢?和朋友具体,收到xx硬盘空间慢了、xx服务器高负载等问题,你要回家处理?多扫兴 瞧瞧zabbix远程执行命令可以做些什么吧: 重启应用(Apache、nginx、MySQL等等) 使用IPMI接口重启服务器 自动释放磁盘空间(删除老文件,清除/tmp目录等等) CPU过载时讲一个虚拟机迁移到另外一台物理服务器 云环境下,一台服务器CPU\硬盘\内存\其他硬件资源不足的情况下,可以自动添加过去 创建一个报警,记得使用邮件报警吗?呵呵,实际上,我们把发送邮件的操作改成执行远程命令就行了 备注:zabbix代理不支持远程命令 远程命令最大长度为255字符,同时支持多个远程命令,如需要执行多条命令,只需要另起一行写命令即可,还有,远程命令可以使用宏变量。 接下来我将一步一步告诉大家如何设置远程命令 配置 首先我们需要在zabbix客户配置文件开启对远程命令的支持,编辑zabbix_agentd.conf,修改 1 EnableRemoteCommands = 1 重启客户端 备注:Aive zabbix不支持远程命令 然后配置action,Configuration->Actions,选择Operation选项卡,operation type改成Remote Command,选择远程命令类似 (IPMI, Custom script, SSH, Telnet, Global script),输入远命令 配置Action 在Operations选显卡中选择Remote command 选择远程命令类型(IPMI, Custom script, SSH, Telnet, Global…