大型分布式网站架构设计与实践

前言

我很感谢那些写书的大牛,真是因为他们的书籍才能让我快速进步。

第一章-面向服务体系结构soa

一、基于TCP协议的RPC
remote process call
1、实现方式 rmi webservice
2、传输对象序列化方式
java自带的 objectoutputstream、hessian进行序列化
二、基于HTTP协议的RPC 夸平台优势,无需考虑多线程,并发问题。
OSI模型有7层结构,每层都可以有几个子层,网络由下往上分为:
物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层,
1、网络接口层到 ip层 到 tcp层 到http层 (socket则是对TCP/IP协议的封装和应用(程序员层面上)。TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,HTTP是应用层协议,主要解决如何包装数)
2、优势 跨平台,使用json和xml作为传输数据
3、URL链接风格 rpc和restful representational state tranfor
4、springmvc restful
@RequestMapping(value=”/provider/{serviername}/{time}”,method=RequestMethod.POST)
public String test(@PathVariable (“servicename”),@PathVariable (“time”)){
}
三、服务的路由与负载均衡
1、负载均衡方法
当服务的规模比较小时候,可以采用硬编码方式,将服务方式和服务地址写在代码中。或者用f5,enignx,lvs
当服务过多就需要一个可以动态注册和获取服务的地方。zookeper
2、负载均衡算法
3、zookeeper使用

第二章-分布式系统基础设施

一、分布式缓层memcached
二、分布式session
三、持久化存储
1、关系型数据库mysql
①业务插分,提高系统扩展性,开发和测试效率,系统部署稳定性
②复制策略,mysql的主从复制可能存在数据延迟现象,因为是异步。读和写分库操作
master和多个slave结构,但是这个存在单点故障,当master发生故障时候,系统将无法完成写入。所以可以采用dual-master,也就是master和master的结构。
③分表与分库,如果单个表的数据达到亿级别,可以将这个大表拆分成n个带number标示的表。
比如根据user_id%256进行存储。例如查询user_id为255的数据 可以查询select from order_1
分表可以解决单表查询效率低下的问题,但是无法解决在高并发下对数据库的频烦修改,因此需要分库。
2、hbase、redis、activemq
进行容错和单点故障采用。
activemq集群采用master-slave架构。基于文件系统和基于共享数据库的master-slave架构。
当系统规模增大,可以采用broker模式,将不相关的的queue和topic拆分到多个broker
四、消息系统
activeMq&jms
五、垂直化搜索引擎
lucene

第三章-互联网安全架构

一、xss (cross site scripting)攻击
俗称跨站脚本攻击。利用的是站点信任的用户,在网页中嵌入恶意脚本,可以盗取cookie,用户密码,下载执行病毒。

二、crsf(cross site request forgery)攻击
俗称跨站请求伪造。利用的是伪装来自信任用户的请求来利用受信任的网站。可以以你的名义向第三方网站发送恶意请求,比如发送邮件,发送短信,进行交易。
crsf防御,
1、将cookie设置成HttpOnly
2、增加token验证。
页面的增加一个隐藏域token,token由服务器端生成,传到前台。如果模拟提交,必须要带上token的值。这样就可以避免模拟请求了。。
3、通过Referer判断
referer里面记录了访问源头网站地址。获取这个请求的源头地址,然后和服务器比较,防止跨站。
三、sql注入 sql injection attacks and defens
sql注入防范:①使用jdbc的预编译 ②使用orm框架,会对特殊符号的值进行转义操作。③前台传入的时候进行转义操作或者验证。④避免密码明文存放,用hash加密。⑤处理好相应的异常,不要把异常抛向
四、文件上传漏洞
针对用户上传到服务器的文件需要加验证,防止客户上传可执行脚本或者文件获得服务器相应的权利。
每个文件的起始的字节内容是固定的,根据这些字节内容就可以确定文件内型,这几个字节俗称魔数。后台定义一个enum内型,记录所有内型和其对应的asic码。
可以利用imagemagic架包对图片加水印,压缩,缩放,破坏用户上传的二进制文件格式。
五、ddos(distributed denial of service)分布式拒绝服务攻击。
将大量肉鸡电脑联合起来,在某一时刻对某一主机进行访问,从而达到瘫痪主机功能
①syn flood
②dns query flood
③cc攻击
五、常用安全算法
1、数字摘要:
①mda ②sha ③十六进制编码 ④base64编码 ⑤对称加密算法 ⑥非对称加密算法
2、为什么要认证
如果经由http协议进行的大量数据都是明文的,那么如果有人对网络核心节点进行监控,就有可能抓取到敏感的数据。
wireshark 工具。
六、Oauth协议
1、出现缘由
第三方服务如果想接入某一平台的应用,传统的肯定涉及到密码等用户敏感信息认证。如果在不涉及用户密码情况下完成认证。
用户,平台商,第三方开发者。
oauth授权过程:

第四章-系统稳定性

  • 在线日志分析

一般我们部署项目都是在Linux服务上面的,所以利用命令去查看日志文件是一个合格程序员的基本功。记得有次去面试的时候,面试官问我如果系统down掉,需要咋弄,我第一反应自然是看日志了,接着他就问我怎么去定位错误,然后我的回答弱爆了,利用SSH去服务器将日志文件拷贝到本地,然后用编辑器打开,分析日志。如果日志文件小的话,这样操作没问题,可是如果当日志文件达到G级别的话,这样做的弊端就出现了,其实他这样问的意思就是想看看我对linux常用命令的了解情况。

常用命令:

cat -n test.log :显示文本所有内容,带行数号。

cat命令只适用于文本内容较少情况,当文本内容过多,我就需要用到带分页命令

more test.log: 按住enter显示下一行,空格显示下一页。f显示下一屏内容,b显示上一屏幕内容。

有时候我们需要查找文件里面指定字符串的文件,并且高亮显示,这时候less命令就出来了。和gerp命令有点类似

less test.log  然后我们按住“/”输入需要查找的内容

有时候我们项目发布新版本,需要我们一遍操作,一遍查看日志进行验证。上面的哪些命令运行之后只能看到文件当前里面的内容,不能动态的查看后来追加到日志里面的内容,这时候就需要用到我们的tail命令

tail -f 20 test.log  -f表示可以动态显示追加的内容,20表示显示文件末尾到前面20行数据

head -f 20 test.log 命令是和tail相反的,从头部开始显示

sort 默认是按照字符排序的 -n参数是按照数字顺序的 -r参数是按照逆顺序的。

字符统计
wc -c参数表示文件字节数 -l参数文件行数 -L参数文件最大行的长度 -w文件包含的单词数

查看重复行的次数 :uniq -c参数表示每行显示该数值重复的次数

字符串查找

grep -c gao log.txt -c参数为显示该查找值所在行数。

文件查找

find /usr/java -name log.txt
find . print 递归打印当前目录所有文件

定位执行程序位置

whereis mysql

表达式求值

expr 2 + 2

生成日志归档文件
tar -cf log.tar temp temp2 将temp和temp2目录下文件打包成log.tar
-c是生成新的tar -f参数指的是文件名称
tar -xf log.tar 解压包到当前路径

tar 对应的命令有 :
-x:解压  -c: 建立压缩档案  -t:查看内容
-r:向压缩归档文件末尾追加文件
-u:更新原压缩包中的文件 -z:有gzip属性的
-v :显示所有过程
-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。 必须的

还有一些复杂的命令组合以后用到再看吧。

  • 集群监控

    1、监控指标

    监控指标主要分以下几类:系统load,cpu负载过高,磁盘I/O过于繁忙,内存使用过多导致频繁Full GC ,qps(Query Per Second)过高

常用命令如下:
这里写图片描述

uptime : load average后三个数表示1,5,15分钟系统的load值。只要系统load值在3和5之间都算正常

top命令查看cpu信息:

top: shirft+m 可以按照内存大小排序
top |grep Cpu 可以显示cpu的信息

磁盘剩余空间:

df -h :磁盘剩余空间

网络拥堵情况:
这里写图片描述

sar -n DEV 1 1:
rxpck:表示每秒接收数据包数量
txpck:每秒发出的数据包数量
rxkb :每秒接收到的字节
txkb :每秒发送的字节
rxcmp:每秒收到的压缩包数量
txcmp 每秒发送的压缩包数量
rxmcst 每秒收到的广播包数量

磁盘i/o吞吐量:
这里写图片描述

iostat -d -k
kB_read/_wrtn s 每秒读/写
kB_read/wrtn 总读/写总量

内存查看:
这里写图片描述

free -m(m为单位)

buffer里面为缓冲的
free=第一行的(free)+buffers+cached

vastat: 也可以查看swap/Io

还有一些可以检查性能的有:

response time:相应时间
qps:Query Per Second 每个页面加载时间
心跳监测

集群情况下,当某一天服务器挂了需要第一时间知道,可以利用程序代码去控制。比如zookeeper或者手动写代码去控制

  • 流量控制
    暂时没接触的,就当了解。

当大量并发过来了,可以利用activeMq队列去处理请求

  • 性能优化
    一、服务稳定性
    ①依赖管理,那个服务调用那个服务,分布式soa
    ②优雅降级
    ③服务分级
    ④开关
    ⑤应急预案
    二、高并发系统设计
    ①操作原子性,可见性,有序性。
    ②多线程同步 线程锁使用
    ③数据一致性
    ④系统可扩展性
    ⑤并发减少库存
    三、性能优化
    ①前端优化
    YSlow工具 、页面响应时间、方法响应时间btrace工具、gc日志分析(minor GC ,Full GC )
    、数据库查询

  • 故障排查

第五章-数据分析

  1. 列表内容
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
分布式数据库是指将一个大型数据库拆分为多个子数据库,这些子数据库可以分布在不同的服务器或地域上,并通过网络连接实现数据共享与交互的一种架构。其中,mycat中间件是一种支持分布式数据库架构的开源mysql集群代理,可以对多个mysql数据库进行分片、读写分离、负载均衡等优化,提高了数据库的性能和可扩展性。 企业实践中,分布式数据库架构主要应用于如电子商务、金融、游戏等高并发场景,将数据分散到多台服务器上,避免单点故障和瓶颈的发生,保证了数据库的高可用性和可靠性。同时,通过mycat中间件对读写请求进行分离,解决了热点数据的问题,有效提升了数据库的读写性能。此外,mycat可以通过数据分片的方式实现数据的水平扩展,满足企业的业务需求。 例如,支付宝就使用了分布式数据库架构,并在mycat的基础上进行了二次开发。支付宝的数据库集群包括了多个分片节点,并通过mycat对访问进行路由和负载均衡,实现了近乎线性的扩展性。在2017年双十一的购物狂欢节中,支付宝的交易额达到了1207亿,没有发生任何事故,这得益于他们稳定的分布式数据库架构。 总之,分布式数据库架构和mycat中间件已经广泛应用于企业实践中,成为了提高数据库性能和可扩展性的有力工具。同时,随着大数据、云计算等新技术的发展,分布式数据库架构的重要性和应用前景将会越来越广阔。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值