今日头条Go建千亿级微服务的实践(转)

今日头条当前后端服务超过80%的流量是跑在 Go 构建的服务上。微服务数量超过100个,高峰 QPS 超过700万,日处理请求量超过3000亿,是业内最大规模的 Go 应用。

Go 构建微服务的历程

在2015年之前,头条的主要编程语言是 Python 以及部分 C 。随着业务和流量的快速增长,服务端的压力越来越大,随之而来问题频出。Python 的解释性语言特性以及其落后的多进程服务模型受到了巨大的挑战。此外,当时的服务端架构是一个典型的单体架构,耦合严重,部分独立功能也急需从单体架构中拆出来。

为什么选择 Go 语言?

Go 语言相对其它语言具有几点天然的优势:

  • 语法简单,上手快
  • 性能高,编译快,开发效率也不低
  • 原生支持并发,协程模型是非常优秀的服务端模型,同时也适合网络调用
  • 部署方便,编译包小,几乎无依赖

当时 Go 的1.4版本已经发布,我曾在 Go 处于1.1版本的时候,开始使用 Go 语言开发后端组件,并且使用 Go 构建过超大流量的后端服务,因此对 Go 语言本身的稳定性比较有信心。再加上头条后端整体服务化的架构改造,所以决定使用 Go 语言构建今日头条后端的微服务架构。

2015年6月,今日头条开始使用 Go 语言重构后端的 Feed 流服务,期间一边重构,一边迭代现有业务,同时还进行服务拆分,直到2016年6月,Feed 流后端服务几乎全部迁移到 Go。由于期间业务增长较快,夹杂服务拆分,因此没有横向对比重构前后的各项指标。但实际上切换到 Go 语言之后,服务整体的稳定性和性能都大幅提高。 Continue reading "今日头条Go建千亿级微服务的实践(转)"

在CentOS上配置基于主机的入侵检测系统(IDS)

所有系统管理员想要在他们生产服务器上首先要部署的安全手段之一,就是检测文件篡改的机制——不仅仅是文件内容,而且也包括它们的属性。

AIDE (“高级入侵检测环境”的简称)是一个开源的基于主机的入侵检测系统。AIDE通过检查大量文件属性的不一致性来检查系统二进制文件和基本配置文件的完整性,这些文件属性包括权限、文件类型、索引节点、链接数、链接名、用户、组、文件大小、块计数、修改时间、添加时间、创建时间、acl、SELinux安全上下文、xattrs,以及md5/sha校验值在内的各种特征。

AIDE通过扫描一台(未被篡改)的Linux服务器的文件系统来构建文件属性数据库,以后将服务器文件属性与数据库中的进行校对,然后在服务器运行时对被修改的索引了的文件发出警告。出于这个原因,AIDE必须在系统更新后或其配置文件进行合法修改后重新对受保护的文件做索引。

对于某些客户,他们可能会根据他们的安全策略在他们的服务器上强制安装某种入侵检测系统。但是,不管客户是否要求,系统管理员都应该部署一个入侵检测系统,这通常是一个很好的做法。 Continue reading "在CentOS上配置基于主机的入侵检测系统(IDS)"

Centos7设置服务开机自启动

一、设置crond.serivice服务为开机自启动

步骤1:查看crond.serivce服务的自启动状态

此时crond.serivce的自启动状态为disabled

步骤2:开启crond.serivce服务自启动

列出所有的启动文件:

列出所有状态为enable的启动文件

关闭crond.serivce的自启动状态

Continue reading "Centos7设置服务开机自启动"

CentOS7下安装MySQL

镜像源

下载安装镜像源:

Continue reading "CentOS7下安装MySQL"

使用Docker容器的十大误区

对于用户来说,可能一开始在不了解的情况下会对容器报以拒绝的态度,但是在尝到容器的甜头、体验到它的强大性能之后,相信大家最终是无法抵挡其魅力的。容器技术能够解决IT业目前面临的很多问题,而且优势也很明显,比如说:

1、容器具有不可变的特性。
容器将操作系统、程序库、配置文件、路径和应用程序打包在一起运行,也就是说,我们在做QA测试的时候整个镜像是什么样,投入到产品环境以后就是什么样,其性能不会有任何差距。
2、容器都非常轻量。
单个容器的内存占用很小,不像其他进程动辄占用上万MB的内存空间,容器只会给主进程分配内存,可以有效降低系统开销。
3、容器的速度更快。
虚拟机的启动时间一般都在分钟级,容器的启动速度可以达到秒级,启动容器就跟启动linux进程一样快。
Continue reading "使用Docker容器的十大误区"

容器管理利器:Web Terminal 简介

一、前言

在微服务大行其道的今天,容器恰巧又是微服务的主要载体,所以我们操作的对象也由最开始的「物理机」到「虚拟机」再到今天的「容器」。由于这些载体的变更,我们的使用方式也需要随之发生一些改变。比如一个最常用的登入操作,「虚拟机」下我们可能通过 ssh 的方式 ,但如果是容器呢?ssh 的方式就需要在每个容器中都运行一个 sshd 进程,这种做法可行但略显繁琐,也不太符合一个容器只运行一个进程的思想。

那么有没有一个即方便快捷又安全的登入方式呢?

有,通过 Web Terminal 的方式,通过 Web 的方式即可以避免对客户端的依赖又能够实现用户权限控制。目前,有很多开源的 Web Terminal 的项目,基本上都是通过 ssh 代理的方式调用并返回一个 shell 的虚拟终端(pty)。

640?wx_fmt=png Continue reading "容器管理利器:Web Terminal 简介"

Redis数据迁移

一、AOF方式

需求: 一个没有数据的redis。

清空redis数据方法

Continue reading "Redis数据迁移"