Archive for June, 2016

作者:AngryFox 分类: Uncategorized June 11th, 2016 暂无评论

视频云架构

全国光纤组网(保证低网络延时)

真正云化的平台服务

集群状态管理
自动发现 – 集群节点上线,新推流落地
自动容灾 – 节点故障切换
自动选择 – 边缘节点定期检测视频源的网络质量,选用2个节点

软件
弱链路依赖 – 支持后端服务容灾
多级细粒度缓存 – 合并回原
GOP Cache(性能与压缩比的取舍)
GOP Cache颗粒大,CDN整体延时增加;颗粒小,内容压缩率下降
边缘直接提供所有播放格式的支持
RTMP
RTMP转HLS
RTMP转FLV等
垃圾过滤、数据的预转换、预处理
web的埋点数据、采集的数据和互联网抓取的一些数据,这些数据通过前端的rest接口,发到下面一个redis,后面是kafka

go的接口调用和普通调用区别很大,
1)相对静态绑定,动态绑定性能差很多
2)运行期的额外开销,比如接口会复制对象,哪怕是指针也会在堆上增加一个GC处理的目标

海量数据计算
OLAP
元数据管理:数据地图
可视化查询
数据质量、安全

作者:AngryFox 分类: Uncategorized June 11th, 2016 暂无评论

安装方法
从 官方下载地址 下载最新版本。

wget -O ./go.tar.gz https://storage.googleapis.com/golang/go1.6.linux-amd64.tar.gz
解压到指定目录。
tar -xzf go.tar.gz -C /usr/local
创建一个目录用作 Golang 的开发目录。
mkdir -p /data/go
配置环境变量。
export echo ‘GOPATH=”/data/go”‘>>/etc/profile
export echo ‘GOROOT=”/usr/local/go”‘>>/etc/profile
export echo ‘PATH=$GOROOT/bin:$PATH’>>/etc/profile
GOPATH 是 Golang 的开发目录,详情查看官方文档

source /etc/profile后即可使用 go 命令。

作者:AngryFox 分类: Uncategorized June 10th, 2016 暂无评论

1、配置防火墙,开启80端口、3306端口
CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙。
1、关闭firewall:
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
yum remove firewalld -y

2、安装iptables防火墙
yum install iptables-services #安装
yum install iptables
vi /etc/sysconfig/iptables #编辑防火墙配置文件
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 3306 -j ACCEPT
-A INPUT -j REJECT –reject-with icmp-host-prohibited
-A FORWARD -j REJECT –reject-with icmp-host-prohibited
COMMIT
:wq! #保存退出
systemctl restart iptables.service #最后重启防火墙使配置生效
systemctl enable iptables.service #设置防火墙开机启动

3、关闭SELINUX
vi /etc/selinux/config
#SELINUX=enforcing #注释掉
#SELINUXTYPE=targeted #注释掉
SELINUX=disabled #增加
:wq! #保存退出
setenforce 0 #使配置立即生效

作者:AngryFox 分类: Uncategorized June 9th, 2016 暂无评论

关闭MySQL日志,删除mysql-bin.0000*日志文件及Starting MySQL.Manager of pid-file quit without updating

MySQL默认是开启了日志文件的,如果数据操作比较频繁就会产生大量的日志,在/usr/local/mysql/var/下面产生mysql- bin.0000* 类似的文件,
而且一般都在几十MB到几个GB,更甚会吃掉整个硬盘空间,从来导致mysql无法启动或报错。
如何关闭MySQL的日志功能:
删除日志:
执行:/usr/local/mysql/bin/mysql -u root -p
输入密码登录后再执行:reset master;
再输入:quit 退出mysql命令模式。
彻底禁用MySQL日志:修改/etc/my.cnf 文件,找到
log-bin=mysql-bin
binlog_format=mixed
再这两行前面加上#,将其注释掉,再执行/etc/init.d/mysql restart即可。
如果实在想保留日志,可以在/etc/my.cnf里加入
expire_logs_days = 30
然后重启mysql,这样30天就会自动清理日志。
因为硬盘满了,mysql启动不起来了,删除mysql的日志文件,重启mysql发现错误:
启动的时候出现错误:
Starting MySQL.Manager of pid-file quit without updating file.[FAILED]
网上有不少这个原因的解释,但是都不是我想说的。
data/mysql-bin.index 没有删除,data/mysql-bin.index是存放日志文件索引的文件,只删除了日志文件而没有对日志的索引文件做处理显然是不行的。
删除data/mysql-bin.index文件,再service mysqld start就可以了

作者:AngryFox 分类: Uncategorized June 8th, 2016 暂无评论

模块化
业务服务模块化拆分可独立发布部署
通过服务治理工具可分析服务调用情况按需扩容
性能和可用性监控及时发现技术瓶颈
支持热发布业务无感知

网关
网关隔离内外数据
网关服务组装业务场景,模块颗粒更细化
网关提供各种安全机制支持多业务场景
平行扩展无性能瓶颈
统一的数据出入口方便日志分析跟踪

中间件
自主开发数据库组件支持分表分库,主从读写等
封装mq等中间件服务方便架构选型
尽量使用云服务减少维护成本
配置中心化

流式计算
即时计算
持续计算

如果某个依赖服务有问题将会影响到其它服务。例如没有设置合理的RPC超时时间,如果服务A挂了,会导致依赖该服务的其它服务出现问题,进而引起连锁反应,最终系统雪崩。
关键路径梳理
1.防御式编程,不要相信任何人或服务,做好对自身服务的保护和对依赖服务的熔断。
2.每次发版都有预案。回滚是解决发版引发故障的最快捷有效的手段。
3.灰度!灰度!灰度!
4.完善的监控很重要,需要覆盖系统性能及业务指标,并对这些指标熟知和敏感。

核心的考量指标有:5倍的容量,4个9的可用性,TP99 200ms的响应时间
缓存
进程内的缓存 本机共享内存 分布式共享内存

php
服务治理(SOA) 服务发现、集群管理、负载均衡、调用统计、监控报警、故障转移
TSF协程框架应用,解决爬虫程序并发问题

http2.0
支持并发,通过标记stream_id实现多条并发数据流
头部压缩,静态表+动态表+Huffman Table
Push Promise支持主动推送
相比http1.0,仅底层通信方式的变更,应用代码无需变更
netstat -anpt

作者:AngryFox 分类: Uncategorized June 6th, 2016 暂无评论

漏洞描述:
Nginx默认是以CGI的方式支持PHP解析的,普遍的做法是在Nginx配置文件中通过正则匹配设置SCRIPT_FILENAME。当访问http://192.168.1.102/phpinfo.jpg/1.php这个URL时,$fastcgi_script_name会被设置为“phpinfo.jpg/1.php”,然后构造成SCRIPT_FILENAME传递给PHP CGI。如果PHP中开启了fix_pathinfo这个选项,PHP会认为SCRIPT_FILENAME是phpinfo.jpg,而1.php是PATH_INFO,所以就会将phpinfo.jpg作为PHP文件来解析了。
漏洞危害:
WebServer Fastcgi配置不当,会造成其他文件(例如css,js,jpg等静态文件)被当成php脚本解析执行。当用户将恶意脚本webshell改为静态文件上传到webserver传递给后端php解析执行后,会让攻击者获得服务器的操作权限。
修复方案:
(Nginx用户可以选择方案一或方案二,IIS用户请使用方案一)
方案一,修改php.ini文件,将cgi.fix_pathinfo的值设置为0。完成后请重启PHP和NGINX(IIS)。
方案二,在Nginx配置文件中添加以下代码:
复制代码 代码如下:

  if ( $fastcgi_script_name ~ \..*\/.*php ) {
  return 403;
  }
这行代码的意思是当匹配到类似test.jpg/a.php的URL时,将返回403错误代码。修改完成后请重启Nginx。

作者:AngryFox 分类: Uncategorized June 2nd, 2016 暂无评论

在服务降级方面,通过使用开源的Hystrix配置服务超时时间,当服务调用超时时,直接返回或执行Fallback逻辑。另外基于Hystrix提供的熔断器组件,可以自动运行或手动调用对当前服务进行暂停后再重新调用服务。流量控制方面,通过计数器服务限定单位时间内当前服务的最大调用次数(比如600次/分钟),如果超过则拒绝,以保证系统的可用性;同时为每个服务提供一个小的线程池,如果线程池已满,调用将被立即拒绝,默认不采用排队,加速失败判定时间。

对于调用链分析,当请求从网关层进入时,追加一个Trace ID,Trace ID会在整个调用过程中保留,最后通过分析Trace ID将整个请求的调用链串联起来。

目前服务拆分是针对不同的业务线进行的,对于电商来讲,会分为商品、订单、会员等几个大的业务线,业务线对应着各种业务中心,服务中心下面还分布着不同的服务集群,目前采用的是面向领域的模式进行拆分。例如商品服务,将商品的价格、库存等销售属性和非销售属性分别拆成不同的模型,针对不同的模型,进行提供服务。

分区数量、消息大小、消费形式等不同的影响因子,对三类消息中间件做对比

测试脚本
压力端 Jmeter的java客户端
消息大小 128字节
并发数 能达到服务端最大TPS的最优并发
Topic分区数量 8
刷盘策略 Kafka和RocketMQ为异步落盘,RabbitMQ的Queue不开启durable持久化
对整个分布式应用系统而言,一共分为两种调用,一种是同步调用,一种是异步调用。同步调用就是基于RPC,基于链路监控等等的一套东西

力解决一致性这个问题,引入 MAR 方案(Multi-thread
Asynchronous Replication 异步多线程强同步复制方案)和自动恢复方案。

的互联网支付业务超高可用性、超高并发和极短响应的需求

高一致(分布式)集群数据存储项目
完全自动化的,在数据底层实现跨 IDC 的强同步、跨城容灾、切换一致性保障、数据自动的
Sharding、集群管理等能力。

TDSQL 的设计核心思想:数据复制(Replica)、数据分片(Sharding):
 数据复制:故障和停机是难免的,而只要数据能够做到强一致性,无论怎么切换,可
用性的问题都可以迎刃而解;
 数据分片:解决海量数据的有效方案是采用集群架构和分片技术,例如如果能将数据
和负载合理的分配到集群的每个节点,控制资源调配,访问路由管理,并通过分片技
术将数据合理的存储在不同的物理资源上,就能轻松资源伸缩问题

,CDB for TDSQL 主要由决策调度集群(TScheduler)、接入网关集
群(TProxy)、数据库节点组(SET)三个核心集群加上 MySQL 数据库引擎共同组成。

可用性之SLB
每个用户N个vip(如何漂移)
单台宕机无影响 => session同步
支持双机房
集群 =>双Active
单个vip => Primary/Standby

DCP架构分层
不可变基础设施
1.容器化
2.系统初始化
3.镜像分发
4.带宽监控

弹性调度
1.业务跨云调度
2.调度机制
3.容量评估

服务发现
1.配置中心
2.负载均衡
3.RPC
4.资源

容器编排
1.自动扩容化
2.监控报警