栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

从java电商小白到秒杀大咖

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

从java电商小白到秒杀大咖

前言

       刚从事java开发的同学很多时间会直接接触一些简单的ssm框架,使用spring mvc外加mybatis实现一个基本的web项目,打个war包部署上线。跟上时代潮流的会使用spring boot直接拉上内置tomcat jar包部署方式上手实现,但却忽略了要想从一名普通的码农程序员升级为一名架构师,对于电商或者其它稍微复杂一点的大型项目,在研发的过程中除了要搞定需求,更多的还需要以领域模型为前提的思维方式划分清楚业务模块,业务模型,并在操作的过程中注重扩展性,性能,流量承载,服务降级等策略

业务分层

       我们在做系统设计时需要遵从领域模型的分层设计思想,如下图

   
    数据层处理数据库的数据模型,如同与数据库的映射,完全遵从数据库的结构字段。

    业务层处理核心的领域模型,拥有对象的生命周期,例如一个电商的商品Item具有商品的领域模型特征,并且拥有创建,更新,查询到删除的完整生命周期。

    接入层视图模型处理面向ui界面的查询模型,与ui前端对接,提升查询和交互效率。


性能优化

    在完成了闭环的业务数据设计后就需要考虑系统的性能问题。平时我们大部分java程序员都是采用spring加mybatis的框架做数据的crud存取,没有考虑扩展问题和缓存问题。

    首先我们要考虑容器级别的优化,我们的tomcat使用了什么样的线程池配置,和客户端是否采用了keepalive的链接,过载保护后的拒绝策略是什么样的,核心线程在idle状态下需要维持多久保证可以扛住洪峰流量?

    然后我们的系统需要考虑到水平扩展性,单台机器的容量肯定无法扛住所有的压力,我们要考虑我们的系统是否支持无状态部署,所谓的无状态就是没有什么配置或者数据是依赖于应用服务器的,这样才能做到我们可以无脑添加机器。在机器得到扩展后需要有统一的存储来支持数据的访问,分布式的redis会话就可以用来解决数据会话问题。数据库的单点问题也是可以用对应的集中式管理策略来解决

    之后当我们面临查询压力时,我们需要考虑使用多级缓存策略解决问题。怎么确保多级缓存可以有效的保障我们的系统,怎么忍受对应的脏读问题。都是需要我们在做系统设计性能优化中需要解决的。最简单的我们可以使用集中式的redis缓存方案解决问题,由于redis支持很好的cluster分片集群模式,其本身又是可以水平扩展的,当redis的网络及内存消耗不能满足我们的热点数据访问时,我们可以使用本地自身实现lru策略的cache缓存,并控制好总容量以及提供快速的响应,并且可以将对应的热点缓存逐步靠近用户,例如可以迁移到nginx甚至于cdn上以求快速的响应用户请求。

    在面临交易压力的时候,由于交易的所有行为都依赖数据库的落地数据确保正确性,因此我们除了做一些数据库的锁级别的优化外,针对库存这类热点数据还可以借助缓冲等方式做实现,但一旦使用了非落地的数据做交易流程,就必须确保数据的最终一致性避免超卖,超发之类的事件发生,因此通常我们会设计分布式的最终一致性事务方案解决问题。

    优化了这些能力之后,我们需要知道,再厉害的系统也经不住中国十几亿人口的同时访问,因此针对过载保护,限流令牌之类的流量削峰平滑操作措施是必不可少的,同时我们也需要知道并不是所有的流量都是正常的流量,有绝大部分的可能是你的流量都是羊毛党刷的,他们不但影响了正常用户的使用,更可能对你的系统造成致命的打击,因此识别羊毛党,防刷等操作必须是我们要面临承担的问题解决。

总结

    没有最牛的系统,只有最合理的业务架构设计,因此在我们学习并掌握了业务建模和容量提升的基本方法后,我们需要结合电商业务的发展实际去设计系统,解决问题。

·················

欢迎关注课程:《Java电商秒杀系统深度优化 从容应对亿级流量挑战》

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/237041.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号