Java商城 架构演化
本系列文章主要是针对Java商城相关架构演化的介绍,不讲解具体业务、技术等。
最近公司要搞商城,让我多方咨询,最后看了很多,要不就是代码、表字段注释不全,要不就是bug多,要么就是文档缺少,最后决定自己开发一套商城。
下面是开发的一些心得体会,权且记录下来,给自己做个记录把。
之前一直都是在从事电商相关和互联网金融开发,处理过亿级数据量,所以被目前这家公司看重。
由于Java是开源的,最近几年Hadoop等开源产品越来越成熟,而且是基于Java的,所以最终选择Java最后后台开发语言,现在前端是自己的前端工程师写的js,后期准备改成前端是PHP,中间是Go语言,后台服务器是Java,因为PHP写前端很厉害,不过这个也是后期了。
控制层:这几年springMVC发展的非常火,而且开发效率比较高,struts系列已经完全没落了,所以现阶段选择SrpingMVC。
视图层:网上已经有非常多的测试过JSP、freemarkder、velocity等,结果性能:velocity>freemarker>jsp,开发速度:velocity>freemarker>jsp
数据库设计:
1、关键的一个是绝对不能有外键强关联,我看到类似用hibernate产品的一些公司,全部都是强关联,那你以后想删除一些数据,那真是噩梦的,这个还不用说,查询性能方面影响也是巨大的。
2、分库分表,这个必须要支持的,做互联网数据量是非常的巨大的,如果开始就不能支持分库分表,那么后期会至少花上千万去做这事,最好一个例子就是当当网,当年很多事单库的,到现在也没有实现分库分表,它们只能使用一些分区表架构,分区表本身就存在很大问题,比如扩展性、数据量过亿都是问题!!!!
3、分布式图片服务器:我看到有些公司图片还是上传到项目根目录的,这个真是噩梦,测试图片就有15个G,你怎么玩???
数据库选择:
最好还是myslq,
1、轻量
2、开源(阿里的alisql就是MySQL改个名字)
3、功能能满足电商需求
搜索:选择lucene较好,原因是他封装的较好。
权限:对于电商来说不应该设计的过于复杂,我认为主要就两张表就够了,一个是角色Role表,一个是资源Resources表,然后用户和角色通过中间表关联下就OK了,角色里面有资源,很简单的逻辑。
SpringSecurity和Apache Shiro都是基于RBAC的,但是两者的R是不一样的,Security是Role,Shiro是Resource,所以Security不能细粒度的控制权限,这里就不推荐大家使用了,建议有些公司使用这个做权限的换成Shiro或者自定义一套,也是非常简单的。其实互联网项目并不需要太多的权限校验,因为每个项目模块都是独立的,这个就减去一块权限校验,剩下来才是真正的角色权限逻辑。
注:这里不推荐使用是因为我主要就是角色控制,其实这些权限框架主要是授权,如果你项目没有授权需要,那不如不用,用了反而增加开发成本。
缓存:
1、数据缓存
目前使用Redis,我看到有的公司使用的是memcache,这个10年前,就这屌样,功能非常的简陋不说,主要一个问题是会有死缓存,就是缓存怎么也清空不了,这个你想想就知道多悲剧了,商家修改了价格,怎么也改不了,最后只能关闭机器重启。还有的公司使用的还是hibernate提供的ehcache,这个大家自行了解即可,关键是他做集群有问题,搞电商不可能是单机的,刚上线至少是2台服务器。
2、图片、文件等缓存
访问图片下载、页面下载也是非常耗费带宽的,那么怎么解决?
图片、文件(css、js、html静态页面)都需要做CDN缓存来解决,类似京东、淘宝都是通过替换文件的方式,比如你第一次访问了,这个文件在你们本机电脑设置的时间是永久保存方式,不过期的,那么要替换css、js怎么玩?换一个文件名呀,看着恶心不?但是访问速度确实非常快的。。。
静态化:一般模版语言都可以实现静态化,可以实现全站60%都是静态页面,数据从集群Redis缓存中读取。
服务化:目前使用dubbo,虽然阿里开源的产品代码质量被人诟病,但是阿里的东西经受住高并发、大流量的考验,即时老外的东西再好,也没有这样的场景去考验,虽然权衡后选择dubbo。
分布式图片服务器:这个也是非常重要的环节,目前我们测试系统都有15个G的图片了!!!!线上估计会是以T计算的,肯定是需要独立的图片服务器的。目前推荐使用FastDFS,这个还不错——图片、压缩包之类的文件都可以上传。
集群、分布式:前面的分库分表、服务化、图片服务器都是为集群、负载、分布式做准备的,业务层用dubbo做分布式服务。
负载均衡:使用Nginx来做高可用负载,给予CDN切换方式做高可用,一般公司市值30亿美金的都能满足。在以后的话就用F5吧。。。。。收费的嘛,你懂得。。。
下面整理下整个架构吧:
展示层/控制层:springMVC持久层:本团队开发的mybatis增强版本(程序员几乎不需要写SQL、配置等)数据库:MySQL/Oracle,支持主从复制、读写分离、多机备份、支持分库分表缓存机制:redis,CDN图片缓存,也是支持热备份、高并发静态化机制:velocity/freemarker等模版语言分布式图片服务器:FastDFS搜索引擎: Lucene 服务器:Linux中间件:tomcat、nginx,还有其他N多的支持集群部署的安装间接软件,就不一一列举了图片服务器:通过分布式文件系统FastDFS集群方案:多机tomcat,seesion统一管理,图片统一管理。这些需要一套解决方案。服务器要求:linux/windows,8G内存,空间200G以上
最后对于JAVA领域商城的开发,其实在PHP、.NET语言中,已经有非常多的成熟同类产品了,比如shopnc、ecshop等等等,但是PHP的逻辑都是写在前台文件中,这个就跟JAVA中的逻辑都是写在了JSP中一样,这样虽然便于开发,但是安全性、扩展性方面都不行,后期二次开发、维护也不方便。另外.NET语言大家都是知道的,它是不开源的,这个我觉得不敢用的,哪天你遇到致命bug了,没法从底层排查,这也是为什么银行、金融、电商很多行业不用这个语言原因了。
还有外行的人被推荐使用apache ofbiz,这个框架就是个大杂烩,大家不过分神话它。
对于JAVA开发方面,其实如果有好的架构,JAVA程序员只写逻辑,前端只写前端,数据库DBA只关注DBA,这样的话,开发起来会非常的方便。
作者:zhou9898
来源:CSDN
原文:https://blog.csdn.net/imjcoder/article/details/73089468
版权声明:本文为博主原创文章,转载请附上博文链接!
Java商城 架构演化相关推荐
- 架构演化:云原生时代开启之系列一演化篇
信息技术从出现伊始到渐成主流,其趋势经历了软件.开源和云三个阶段: 软件改变世界.纵观人类社会漫长的发展历程,农耕时代.工业时代与信息时代可谓是三个明显分水岭,每个时代人类涉及的领域范畴均喷井式增长. ...
- java商城_java开源商城系统的优势是什么?
电商平台开发 大家都知道,java开放性源码提供了开发商便利,经过开发商对源码的二次修改,在系统的易用性和实用性方面都得到了空前的突破,真正达到了只要会打字就能够建设专业水准的商城系统.采用java开 ...
- 一线Java架构师概括互联网公司的标准Java技术架构
一线Java架构师概括互联网公司的标准Java技术架构 大部分人对于BAT的技术有一种莫名的崇拜感,觉得只有非常牛逼和天才才能做出现在的这些系统,但经过前面两篇博文的分析,我们可以看到其实并没有什么神 ...
- java商城有怎么样的优势,关于java商城系统的优势介绍
在现在的电商市场上,PHP商城系统跟java商城系统是最受欢迎的两种不同开发语言的,两种不同的语言的系统都各种有各自的优势,那么其中java商城具有什么样的优势的呢?接下来就给大家讲讲关于与java商 ...
- 淘宝、京东电商的崛起,为什么如今越来越多的企业选择java商城?
自从网上购物开始兴起后,销售额每年都在增长,而电子商务最重要的主体就是软件系统.目前市面上应用最广泛的商城系统就是java类型的商城系统.其主要的原因是因为java商城系统安全性最高,而且java语言 ...
- vivo全球商城架构演进之路
本文讲述vivo官方商城从单体应用到具备综合能力电商平台的演进,系统架构往服务化.中台化的变迁历程. 前言 vivo官方商城,是vivo官方的线上电商平台,主营vivo手机及专属配件.经过几年发展,已 ...
- java系统架构设计,2022最新
Java中23种设计模式的详细解析Java开发中23种设计模式详细介绍设计模式介绍设计模式分类设计模式六大原则开闭原则(Open Close Principle)里氏代换原则(Liskov Subst ...
- vivo商城架构演进之路
来源:vivo互联网技术 一.前言 二.架构变迁史 2.1 商城 v1.0 单体时期 2.2 商城 v2.0 服务化 2.3 商城 v3.0 业务系统拓展 三.国际化 本文讲述 vivo 官方商城从单 ...
- 2018.7-2019.7一周年Java进阶架构师技术文章整理 建议收藏
其实师长的公众号从2017年就开始发技术文章了,但是因为某些原因(就是懒)太监了许久,直到2018.7的时候才恢复更新.不知不觉中,已经更新了一年的广告,在没广告的日子里,顺带更新技术文章,截至201 ...
- bd-java_BDShop是国内少有前后端完全分离的java商城项目.
BDShop ##交流QQ群:107304892 2017-10-03 半年第一次更新了 修复所有bug 请大家更新一下 BDShop是国内少有前后端完全分离的java商城项目. BDShop 系统简 ...
最新文章
- [Angular Tutorial] 11 -Custom Filters
- 深入.NET 4.0之,LazyT点滴
- OpenStack/Gnocchi简介——时间序列数据聚合操作提前计算并存储起来,先算后取的理念...
- python爬虫代码提取图片中的文字_python识别图像并提取文字的实现方法
- linux 本地做yum源,linux——制作本地yum源
- httpWebRequest和webRequest的区别
- OpenGL Tessellation细分曲面的实例
- 网站运营过程中经常触碰的几大误区
- Android 版本对于 API
- ECMAScript 2021 特性
- linux netcat命令实例
- FireFox下表单无法刷新重置问题的分析与解决(转)
- android 生成车牌号,android 车牌号识别系统app源码
- Linux操作系统——vi文本编辑器
- 计算机基础知识复习(一)
- oracle建表的方法,oracle建表语句
- android课程设计闹钟,EDA课程设计---数字时钟(闹钟)
- Keras的Adam优化器decay理解及自适应学习率
- /给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[
- pandas 筛选行 整行复制粘贴