@(服务监控)[nginx]
nginx的upstream目前支持以下几种方式的分配 - 轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
- weight 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。好的服务器weight高些,差的服务器weight低些。
@(Xcaspar)[shiro|freemarker]
JSP页面中调用shiro标签十分方面,只需要导入:
<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>
但是和freemarker联合使用,需要做一下调整:
编写一个类,继承org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer
此类,重写此类的afterPropertiesSet()
方法,用com.jagregory.shiro.freemarker.ShiroTags
替换原有shiro标签,实例如下:
@(mysql)
####查询语句处理流程
MySQL一条查询语句的处理是:【语句合法性检查】——【语义检查】——【获取对象解析锁】——【数据访问权限的核对】——【查询优化】——【语句执行】,这次主要介绍一下【数据访问权限的核对】中的“账号认证”。
用户账号是由user(用户名)和host(客户端主机)共同组成的,其是通过默认的mysql数据库中的user表来定义的。其中Host、User、Password三个字段的信息作为接入连接的认证参考。可以通过SHOW CREATE TABLE user \G命令来查看user表的内部结构。
User是连接登录使用的用户名;Host是客户端的主机名称或者是IP地址;Password是提供给服务器端登录认证的密码。三个字段都不得为NULL,默认会将他们都设置为空的字符串,也就是说User可以为匿名用户,
####安装
Memcached需要先安装libevent库,然后获取源码编译安装。
Redis编译安装即可
####配置
Memcached配置详解
Redis配置详解
####使用
Memcached启动命令:memcached -d -m 内存大小(M) -u 运行用) -p 端口号 -c 最大并发连接数 -P /tmp/memcached.pid
@(系统架构)[分布式] ####架构 讲这之前先说一下我们的系统架构,整个电商平台分为商品系统、交易系统、资金系统、游戏通信系统,个系统之间通过Hessian服务调用。业务流程是游戏通过通信系统上架商品,商品系统处理商品,用户下单通过交易系统,用户支付订单时,交易系统调用资金系统,用户支付成功后,资金系统同步和异步回调支付结果。若支付成功,交易系统通知通信系统给买家发货,并通知商品系统,该商品已成功售出。 ####问题 由于是系统间服务调用,不能保证两服务之间的数据处理时一致的。拿下单举例,用户下单,交易系统通知商品系统减库存,如果减库存成功,但订单生成失败,此时就会出现数据不一致的情况:没有生成有效的订单,但是已经减库存了。
我们并没有采用分布式事务管理框架,而是采用幂等性和记录表进行处理的。
幂等性:服务多次调用不会影响预期结果。