一 soa架构
'支持海量的并发'
互联网的发展趋势
######单机时代
lnmp -->所有的服务都在一台机器上,是'单机时代','所有的鸡蛋放大一个篮子里面'
######集群时代
特点:把单机的服务做了拆分
linux:CDN *2('回源')
linux0: nginx *2
linux1:httpd+php *5(session共享)
linux2:mysql *2(主从复制和高可用)
问题1:'性能不够'或者单点故障,多台服务器('高可用架构')-->5个服务器('nginx作为负载均衡提供访问入口'),解决用户访问的问题
问题2:用户上传图片,不可能有的web服务器有上传图片,有的web服务器没有
解决:共享存储,用分布式存储('ceph'和'GFS'以及'MFS')
##分割线
问题3:集群要解决session共享问题
方案1:'写到数据库中',公用一个数据库就解决了-->'wordpress','discuss论坛'
方案2:'以文件形式存在',需要把文件所在共享目录共享出来
##分割线
服务器数量多-->意味着用户量上来了-->数据库的I/O性能会变差!
'数据库瓶颈':把IDE硬盘换成固态硬盘,增加读写性能,能缓解下
进一步'缓存':加缓存(redis实现,用哨兵做高可用)
数据库会成为最终的瓶颈--->进一步缓解-->'读写分离','分库分表'的手段
问题:'业务耦合'
######SOA时代
以前是服务的拆分,现在是'业务的拆分'
'秒杀的业务-->有上面所有的结构,数据库的表(此时只需要10个)'-->只跑某一个'功能'
'优惠券业务'-->也有上面完整的集群结构
'京东的二级域名',已经快突破两位数(max-99),业务'完全拆分'
以前500张表(所有的业务),现在10张表(每个业务)
需求1:使用了秒杀不能用优惠券
事务:'银行卡转账'
A 1000
B 5000
B给A转1000 --->B - 1000;A + 1000 -->B转玩钱突然停电了(A没有增加) ,B肯定不愿因了!
'B转钱和A增加钱是一个整体',不能满足则回滚,到赚钱前的状态!
'同一个库''不同的表'可以实现'事务的一致性'
'不同库的不同表'不能实现'事务的一致性' --->用'消息队列'来解决
消息队列
功能之一:完成事务的'一致性',还有其他的功能
消息队列的功能:在'SOA架构上'实现'数据的一致性'
#######如何完成事务的的'一致性'
'场景':用户买东西,从'钱包'扣钱,由于使用了优惠券,所以会少扣钱
'重点':涉及多业务之间的相互调用问题,这个步骤不可能一下完成,需要分别完成,'完成的进度'都在'写在消息队列里面',只要这个事情'没有最终完成就回滚'-->'开发写代码来实现的'
跨网站的登录问题
需求:登录一个网站,在其他网站也是登录的--->'授权中心(登录认证)'
每次在'授权中心登录',那么登录其他相关联的业务网站就认为'已经登录了'
SOA解决的问题
## SOA解决的问题
'面向服务的架构'(SOA)是一个组件模型
授权中心:'完成中心登录认证,token(令牌),授权中心完成令牌的分发'
消息队列:'完成事务的一致性'
二 openstack架构
openstack是'基于soa架构'的
############分割线
keystone:'授权中心'-->认证服务
glace: '镜像服务'-->创建云主机你得有一个模板,不可能当前装系统,提前装好系统,做成模板-->管理模板
nova: '计算服务'-->提供'云主机的'
neutron: 为计算服务提供'网路服务'-->云主机是否能上网('内网和外网'),用的电信或者联通
cinder: 存储服务-->云主机用着用着,硬盘不够,需要扩硬盘-->专门管理块存储
horizon: 'web界面'--->可视化这么多服务,操作特别不方便,提供一个web界面,点一点就可以创建云主机
以上'最简单的'6个服务
补充
既然是soa架构,每个服务都有'自己的数据库,缓存'
由于'服务器资源比较紧张',每个服务的数据库放在一个里面
原理图
补充说明
## 新版本的openstack把下面三个去掉了
Heat: 编排去掉了;不习惯它的'语法',手动启
Cellometer: openstack定位'私有云',不租给别人,不收自己钱,不用监控了;多一个服务多资源'
Swift: '对象存储';私有云不使用了