免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3452 | 回复: 0

spring+hibernateSHH整合高大尚HTML5 bootstrap [复制链接]

论坛徽章:
0
发表于 2015-08-15 16:51 |显示全部楼层
1.png
开发快报: 页面打印功能,websocket 强制下线功能,玩转websocket技术  

A 代码生成器(开发利器);  
   增删改查的处理类,service层,mybatis的xml,SQL( mysql   和oracle)脚本,   jsp页面 都生成
   就不用写搬砖的代码了,生成的放到项目里,可以直接运行
B 阿里巴巴数据库连接池druid;
  数据库连接池  阿里巴巴的 druid。Druid在监控、可扩展性、稳定性和性能方面都有明显的优势
C 安全权限框架shiro ;
  Shiro 是一个用 Java 语言实现的框架,通过一个简单易用的 API 提供身份验证和授权,更安全,更可靠
D ehcache 自定义二级缓存;
  是一个纯Java的进程内缓存框架,具有快速、精干等特点
  是一种广泛使用的开源Java分布式缓存。
E 微信接口开发(2.5版本新增)(后续会加入Activiti5 工作流 )
-------------------------------------------------------------------------------------------------------------------------
1. 模块化、服务化,流程化,耦合度低、扩展性好,灵活度高,工具类封装完整,干净利索,调用简单方便
2. 提供Rest服务,支持APP手机应用(android和ios)接口、php、.net、易语言、VB等第三方接口调用
3. 全新高大尚HTML5+css3.0+bootstrap响应式开发界面UI,( 手机 PC 平板 截图在下面)、前沿.  spring restful 风格
4. 框架搭建完善成熟,在此基础上做过很多项目,系统具有并发处理、分布式、稳定性。
5. 系统功能完善,此为框架平台,文档、注释齐全,提供技术支持,专门供二次开发
6. 在此基础上可二次开发(OA、ERP、CRM ,医疗管理、金融、网站后台、APP后台、电子商务、商城(赠送UI)等等
7.我们这边是公司,主要业务是定制开发,  此系统为我们平时给客户做项目用的,经过很多项目实战考验
  -------------------------------------------------------------------------------------------------------------------------系统模块
1. 组织管理:角色管理,分角色组和成员,有组权限和成员权限。
2. 系统用户:对各个基本的组会员增删改查,单发、群发邮件短信,导入导出excel表格,批量删除
3. 会员管理:对前台用户管理,分配会员级别,到期时间,状态,联系信息等资料
4. 菜单管理:增删改查菜单 ztree(自定义菜单)业务菜单和系统菜单分离
5. 数据字典:无限级别,支持多级别无限分类。内设编号,排序等
6. 系统设置:修改系统名称,邮件服务器配置,短信账号设置,图片水印配置,微信配置
7. 代码生成:打开代码生成器模块     
8. 图库管理:对批量上传的图片统一管理
9. 性能监控:监控整个系统的性能,SQL监控,SQL防火墙,URL监控,SPRING监控,SESSION监控等
10. 接口测试:POST or GET 方式检测系统接口,参数加密,json返回结果,计算服务器响应时间
11. 发送邮件:单发,群发邮件   
12. 置二维码:生成 or  解析二维码     
13.地图工具:经纬度操作
14.即时通讯:打开即时聊天窗口
15.在线管理:(统计在线人数和在线列表,可强制某用户下线),同一用户只能在一个客户端登录
16.打印测试:页面打印预览测试

-------------------------------------------------------------------------------------------------------------------------
菜单权限:分配给每个角色不同的菜单权限, 每个角色看到的菜单不同
按钮权限:独立分配不同的角色不同的功能权限,增删改查权限分配具体到不同的菜单
支持多用户分权限管理后台,  权限具体到不同的菜单不同的按钮
--------------------------------------------------------------------------------------------------------------信息模块(小项目代码中)
新闻管理:新闻的维护、发布、权重排序等 采用百度ueditor富文本框
公告管理:公告的维护、发布
广告管理:广告的维护、发布,状态维护,上传广告图片
友情链接:友情链接的维护、状态维护
特别推荐:特别推荐、状态维护
微信模块
关注回复:微信用户关注公众号回复
文本回复:匹配关键词进行文本回复
图文回复:匹配关键词进行图文回复
应用命令:匹配关键词进行命令操作,例如微信发送命令,执行服务器重启、关机、锁定等操作
-------------------------------------------------------------------------------------------------------------------------
技术点
1. 导出 导入 excel 文件
2  导出word文件
3. IO 流上传下载文件
4. 群发邮件,可以发html、纯文本格式,可以发给任意邮箱(实现批量发送广告邮件)
5. 群发or单独 发送短信,支持两种第三方短信商接口
6. spring   aop  事物处理
7. 代码生成器 (freemarker), 代码 zip 压缩打包
8. MD5加密 SHA加密(登录密码用此加密)接口加密身份校验
9. 数据库连接池  阿里的 druid。Druid在监控、可扩展性、稳定性和性能方面都有明显的优势,支持并发
10.加入安全框架 shiro (登录授权)(session管理)
11.根据汉字 解析汉字的全拼(拼音)和首字母(导入excel到用户表,根据用户的汉字姓名生成拼音的用户名)
12.app接口@ResponseBody(支持与其它语言数据交互)
13.极光推送 (推送给APP及时消息,APP不启动也能收到)
14.微信接口(身份验证,文本、图文回复等) 微信远程控制服务器重启、锁定、其它应用程序
15.java Quartz 定时器 (定时执行某程序,精确到秒,可设置周期)
16.java websocket 即时通讯技术,点对点,群聊,单聊,EXT4对话框
17.新增Lucene全文检索
18.Base64传输图片
19.图片加水印(图片水印,文字水印)
20.生成 or  解析 二维码
21.HTML5 + JAVAEE  WebSocket 通信技术,WebSocket 验证用户登录,强制某用户下线
22.批量异步上传图片,可预览,有进度条,支持拖拽上传(百度webuploader )。列表动态滑动放大展示。
23.ehcache 自定义二级缓存 ,选择缓存存放目录,处理并发,增加系统性能
24.服务器内部GET POST 请求
25.uploadify 上传插件,单条、批量上传多线程,带进度条,异步,图片、视频, 其它文件格式均可上传
26.地图选点获取经纬度坐标,根据俩经纬度计算距离
27.tab标签页面功能,标签自由切换,不重复操作数据库
-------------------------------------------------------------------------------------------------------------------------
系统框架为:springmvc + mybaits 3.2 有 maven 版本和 非maven 版本 jdk 1.6 1.7 1.8  tomcat 6 7 8
数据库:oracle 版本 和 msyql 版本 ( spring3.0 和4.02  mybaits 3.2)     开发工具:myeclipse  eclipse 均可
赠送 同UI      springmvc + hibernate  SpringSecurity Lucene Quartz MySQL、Oracle、SQL Server
2.png

-------
PC实物截图如下
登录界面背景用HTML5特效自动切换(百叶窗,幕布等多种切换方式)
3.png
4.png
5.png


一些设计原则
•        无状态
•        数据闭环
•        缓存银弹
•        并发化
•        降级开关
•        限流
•        切流量
•        其他
无状态
如果设计的应用是无状态的,那么应用就可以水平扩展,当然实际生产环境可能是这样子的: 应用无状态,配置文件有状态。比如不同的机房需要读取不同的数据源,此时就需要通过配置文件指定。
  
数据闭环
如果依赖的数据来源特别多,此时就可以考虑使用数据闭环,基本步骤:
1、数据异构:通过如MQ机制接收数据变更,然后原子化存储到合适的存储引擎,如redis或持久化KV存储;
2、数据聚合:这步是可选的,数据异构的目的是把数据从多个数据源拿过来,数据聚合目的是把这些数据做个聚合,这样前端就可以一个调用拿到所有数据,此步骤一般存储到KV存储中;
3、前端展示:前端通过一次或少量几次调用拿到所需要的数据。
  
这种方式的好处就是数据的闭环,任何依赖系统出问题了,还是能正常工作,只是更新会有积压,但是不影响前端展示。
  
另外此处如果一次需要多个数据,可以考虑使用Hash Tag机制将相关的数据聚合到一个实例,如在展示商品详情页时需要:商品基本信息:p:123:, 商品规格参数:d:123:,此时就可以使用冒号中间的123作为数据分片key,这样相同id的商品相关数据就在一个实例。
  
缓存银弹
缓存对于读服务来说可谓抗流量的银弹。
  
浏览器端缓存
设置请求的过期时间,如响应头Expires、Cache-control进行控制。这种机制适用于如对实时性不太敏感的数据,如商品详情页框架、商家评分、评价、广告词等;但对于如价格、库存等实时要求比较高的,就不能做浏览器端缓存。
  
CDN缓存
有些页面/活动页/图片等服务可以考虑将页面/活动页/图片推送到离用户最近的CDN节点让用户能在离他最近的节点找到想要的数据。一般有两种机制:推送机制(当内容变更后主动推送到CDN边缘节点),拉取机制(先访问边缘节点,当没有内容时回源到源服务器拿到内容并存储到节点上),两种方式各有利弊。 使用CDN时要考虑URL的设计,比如URL中不能有随机数,否则每次都穿透CDN,回源到源服务器,相当于CDN没有任何效果。对于爬虫可以返回过期数据而选择不回源。
  
接入层缓存
对于没有CDN缓存的应用来说,可以考虑使用如Nginx搭建一层接入层,该接入层可以考虑如下机制实现:
1、URL重写:将URL按照指定的顺序或者格式重写,去除随机数;
2、一致性哈希:按照指定的参数(如分类/商品编号)做一致性Hash,从而保证相同数据落到一台服务器上;
3、proxy_cache:使用内存级/SSD级代理缓存来缓存内容;
4、proxy_cache_lock:使用lock机制,将多个回源合并为一个,减少回源量,并设置相应的lock超时时间;
5、shared_dict:此处如果架构使用了nginx+lua实现,可以考虑使用lua shared_dict进行cache,最大的好处就是reload缓存不丢失。
  
此处要注意,对于托底/异常数据不应该让其缓存,否则用户会在很长一段时间看到这些数据。  
  
应用层缓存
如我们使用Tomcat时可以使用堆内缓存/堆外缓存,堆内缓存的最大问题就是重启时内存中的缓存丢失,如果此时流量风暴来临可能冲垮应用;还可以考虑使用local redis cache来代替堆外内存;或者在接入层使用shared_dict来将缓存前置,减少风暴。
  
分布式缓存
一种机制就是废弃分布式缓存,改成应用local redis cache,即在应用所在服务器中部署一个redis,然后使用主从机制同步数据。如果数据量不大这种架构是最优的;如果数据量太大,单服务器存储不了,还可以考虑分片机制将流量分散到多台;或者直接就是分布式缓存实现。常见的分片规则就是一致性哈希了。
6.png

  

如上图就是我们一个应用的架构:  
1、首先接入层读取本地proxy cache / local cache;
2、如果不命中,会读取分布式redis集群;
3、如果还不命中,会回源到tomcat,然后读取堆内cache;如果没有,则直接调用依赖业务获取数据;然后异步化写到redis集群;
  
因为我们使用了nginx+lua,第二、三步可以使用lua-resty-lock非阻塞锁减少峰值时的回源量;如果你的服务是用户维度的,这种非阻塞锁不会有什么大作用。
  
并发化
假设一个读服务是需要如下数据:
1、数据A  10ms
2、数据B  15ms
3、数据C   20ms
4、数据D   5ms
5、数据E   10ms
  
那么如果串行获取那么需要:60ms;
  
而如果数据C依赖数据A和数据B、数据D谁也不依赖、数据E依赖数据C;那么我们可以这样子来获取数据:
7.png

那么如果并发化获取那么需要:30ms;能提升一倍的性能。
  
假设数据E还依赖数据F(5ms),而数据F是在数据E服务中获取的,此时就可以考虑在此服务中在取数据A/B/D时预取数据F,那么整体性能就变为了:25ms。
  
降级开关
对于一个读服务,很重要的一个设计就是降级开关,在设计降级开关时主要如下思路:
1、开关集中化管理:通过推送机制把开关推送到各个应用;
2、可降级的多级读服务:比如只读本地缓存、只读分布式缓存、或者只读一个默认的降级数据;
3、开关前置化:如架构是nginx--->tomcat,可以将开关前置到nginx接入层,在nginx层做开关,请求不打到后端应用。
  
限流
目的是防止恶意流量,恶意攻击,可以考虑如下思路:
1、恶意流量只访问cache;
2、对于穿透到后端应用的可以考虑使用nginx的limit模块处理;
3、对于恶意ip可以使用如nginx deny进行屏蔽。
  
大部分时候是不进行接入层限流的,而是限制流量穿透到后端薄弱的应用层。
  
切流量
对于一个大型应用,切流量是非常重要的,比如多机房有机房挂了、或者有机架挂了、或者有服务器挂了等都需要切流量,可以使用如下手段进行切换:
1、DNS:切换机房入口;
2、LVS/HaProxy:切换故障的nginx接入层;
3、Nginx:切换故障的应用层;
  
另外我们有些应用为了更方便切换,还可以在nginx接入层做切换,通过nginx进行一些流量切换,而没有通过如LVS/HaProxy做切换。
  
  
其他
不需要cookie的应用使用无状态域名,如3.cn;
接入层请求头过滤,只转发有用的请求头到后端应用;
数据过滤逻辑前置,比如在接入层进行请求参数的合法性过滤;
内网设置合理的连接、读、写超时时间;
根据需要开启gzip压缩减少流量;
使用unix domain socket减少本机连接数;
内网考虑使用http长连接;
响应请求时,考虑响应头加上服务器ip等信息,方便调试。
我们处理的读服务大部分都是KV的,因此抗流量的思路就是大量缓存;而且怎么让缓存怎么更接近用户,离用户越近速度就越快。再一个点就是要考虑好降级方案,在异常情况下应用不被拖垮拖死。我们系统大量使用了如nginx+lua+redis技术,使用这些技术解决了我们很多读服务问题。
8.png




您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP