当前位置: 首页 > news >正文

网站公司市场营销方案页面访问升级老域名

网站公司市场营销方案,页面访问升级老域名,网站建设公司小程序,电商平台建设做网站页面 登录页面 登录成功后#xff0c;跳转商品列表 商品列表页 加载商品信息 商品详情页 根据商品id查出商品信息返回VO#xff08;包括rmiaoshaStatus、emainSeconds#xff09;前端根据数据展示秒杀按钮#xff0c;点击开始秒杀 订单详情页 秒杀页面设置 后端返回秒杀…页面 登录页面 登录成功后跳转商品列表 商品列表页 加载商品信息 商品详情页 根据商品id查出商品信息返回VO包括rmiaoshaStatus、emainSeconds前端根据数据展示秒杀按钮点击开始秒杀 订单详情页 秒杀页面设置 后端返回秒杀状态miaoshaStatus前端根据秒杀状态设置页面 状态码 0 未开始倒计时状态码 1 已开始显示秒杀按钮状态码 2 已结束 剩余时间 remainSeconds 页面加载时获取remainSeconds 的值 未开始remainSeconds 开始时间-当前时间 禁用秒杀按钮显示倒计时设置定时器回调函数一秒一次修改remainSeconds 值直到 remainSeconds 0清除设置定时器则修改页面启用秒杀按钮已开始remainSeconds -1启用秒杀按钮已结束 remainSeconds 0禁用秒杀按钮 倒计时功能 span th:if${user eq null} 您还没有登录请登陆后再操作br//spaninput typehidden idremainSeconds th:value${remainSeconds} /span th:if${miaoshaStatus eq 0}秒杀倒计时span idcountDown th:text${remainSeconds}/span秒/spanspan th:if${miaoshaStatus eq 1}秒杀进行中/spanspan th:if${miaoshaStatus eq 2}秒杀已结束/span秒杀业务逻辑 点击秒杀按钮传递商品ID 秒杀商品form表单提交到后端 判断库存 是否重复秒杀 查询订单信息。如存在则表示已经秒杀过了 减库存、下订单、写入秒杀订单事务 传入参数usergoods用户秒杀商品秒杀成功后生成订单信息包含两个 订单详细信息秒杀订单信息包括user_id、order_id、goods_id便于设置唯一索引user_id、goods_id 支付模块 页面优化 页面缓存URL缓存Thymeleaf对象缓存页面静态化前后端分离静态资源优化CDN优化 缓存 页面缓存 从缓存中取html源代码非空返回(缓存命中)若缓存为空(缓存失效) 手动渲染 thymeleafViewResolver.getTemplateEngine模板引擎WebContext包含业务数据同时添加页面缓存页面缓存有效期比如60秒返回html源代码页面缓存一般有效期比较短保证数据及时性 RequestMapping(value /to_list, produces text/html)ResponseBodypublic String list(HttpServletRequest request, HttpServletResponse response, Model model, MiaoshaUser user) {model.addAttribute(user, user);// 取缓存String html redisService.get(GoodsKey.getGoodsList, , String.class);// 缓存非空返回if (!StringUtils.isEmpty(html)) {return html;}// 缓存为空ListGoodsVo goodsList goodsService.listGoodsVo();// return goods_list;model.addAttribute(goodsList, goodsList);// 业务数据WebContext ctx new WebContext(request, response,request.getServletContext(), request.getLocale(), model.asMap());//手动渲染html thymeleafViewResolver.getTemplateEngine().process(goods_list, ctx);if (!StringUtils.isEmpty(html)) {redisService.set(GoodsKey.getGoodsList, , html);}// 返回htmlreturn html;}} URL缓存 和页面缓存类似例如 页面缓存商品列表无参数URL缓存商品详情接口有ID参数ID不同商品详情不同 参数不同页面信息不同 页面缓存、url缓存有效期比较短适用于页面变化不大的场景如商品列表商品列表有分页只缓存前几页 对象级缓存 更细颗粒度的缓存比如 登录成功时用户信息写入缓存 服务端通过token获取 秒杀成功生成订单时订单信息写入缓存 查询是否已经秒杀过时查缓存不查数据库减少负载 数据更新时也要处理缓存 先更新数据库再让缓存失效删除、更新 Cache Aside Pattern 失效应用程序先从cache取数据没有得到则从数据库中取数据成功后放到缓存中。命中应用程序从cache中取数据取到后返回。更新先把数据存到数据库中成功后再让缓存失效。 试想两个并发操作一个是更新操作另一个是查询操作更新操作删除缓存后查询操作没有命中缓存先把老数据读出来后放到缓存中然后更新操作更新了数据库。于是在缓存中的数据还是老的数据导致缓存中的数据是脏的。 前后端分离 常用技术AngularJS、Vue.js、React优点利用浏览器的缓存 前后端分离 静态数据缓存动态数据调接口页面静态化html、css、js、image缓存到浏览器端动态数据通过服务端获取不需要使用页面缓存和URL缓存了浏览器端已经进行了缓存再用页面缓存和URL缓存没有什么意义对象缓存可以继续使用前后端分离后不经过服务端客户端直接跳转到商品详情页面然后商品详情页面Ajax请求动态数据 商品详情静态化、订单详情静态化 使用jquery模拟不使用thymeleaf 商品详情使用原生html页面跳转时直接跳转到html页面 然后Ajax请求动态数据jquery填充页面 同时根据miaoshaStatus、remainSeconds修改页面 秒杀接口前后端分离 后端仅返回给前端所需的数据不再渲染 HTML 页面不再控制前端的效果。 前端得到数据自己渲染。 前端和后端只关注于自己的逻辑判断和控制。后端仅需提供给前端 API 即可。 不需要表单提交直接按钮 onclick ajax请求数据post请求 静态文件配置 配置静态文件路径不配置304前后端仍然交互了一次配置后200静态文件直接从浏览器取缓存不需要访问服务器减少交互配置后减少前后端交互Cache-Controlmax-age3600缓存时间 静态资源优化 JS/CSS压缩减少流量 多个JS/CSS组合减少连接数 CDN就近访问 tengine 组合多个CSS、JS文件的访问请求变成一个清求自动去除空白字符和注释从而减小页面的体积webpack工具打包 CDN 全称是Content Delivery Network**内容分发网络。**根据用户位置等访问最近的镜像 可以将网站的静态资源如图片、CSS、JavaScript 等文件缓存到全球各地的服务器上当用户请求这些资源时可以从离用户最近的服务器上获取资源从而提高资源的访问速度和用户的访问体验。 CDN 的主要作用是 提高网站的访问速度降低带宽成本提高可用性 同样在高并发场景下CDN 可以发挥重要的作用。 由于高并发场景下会有大量的用户同时访问网站如果所有的请求都直接访问源站就会导致源站的带宽和服务器资源受到过大的压力从而导致网站的访问速度变慢或者出现宕机等问题。 因此在高并发场景下使用 CDN 可以将流量分散到全球各地的服务器上从而减轻源站的压力提高网站的访问速度和可用性。 接口优化 并发大问题瓶颈在于数据库思路减少数据库访问。解决 各种缓存减少数据库负载 接口优化减少数据库访问 数据库分库分表mycat中间件 方案 Redis预减库存减少数据库访问内存标记减少Redis访问请求先入队缓冲异步下单增强用户体验Nginx水平扩展 思路 系统初始化把商品库存数量加载到Redis收到请求Redis预减库存库存不足直接返回否则进入3请求入队立即返回排队中请求出队生成订单减少库存客户端轮询是否秒杀成功 加载库存 实现 InitializingBean接口覆写afterPropertiesSet(方法系统初始化调用此方法加载库存、内存标记到缓存 内存标记 减少redis负载访问秒杀接口时先访问redis内存标记若为true则直接返回商品卖完啦设置redis内存标记初始化为 false放到缓存中redis库存小于0时设置为true 入队缓冲 库存足够没有秒杀过进入下个步骤入队用户商品id用户秒杀商品作为消息发送消息到队列消息接受者监听接收消息异步下单 判断数据库库存是否库存大于0判断是否已经秒杀到了是否存在秒杀订单减库存成功才下单下订单写入秒杀订单唯一索引 轮询 秒杀成功后返回排队中前端开始轮询类比12306买票不马上返回是否抢票成功显示正在排队中 先判断是否存在订单 order存在表示秒杀成功返回 orderId 若ordernull判断缓存标记 缓存标记 false表示没有卖完继续轮询返回 0 缓存标记 true表示卖完啦返回 -1 orderId成功 0 排队中 -1秒杀失败 设置一个缓存标记(false)减库存时若库存为0时设置缓存表示已经秒杀完毕修改缓存标记(true)轮询时若缓存标记为true则卖完啦返回秒杀失败 -1 RabbitMQ 同步直接调用转换成异步间接推送把瞬时并发的大量请求平推出去削弱峰值 秒杀请求过来时先入队缓冲瞬时流量直接返回客户端正在排队中 然后出队生成订单修改库存 同时客户端定时轮询定时查询是否秒杀成功 出队和轮询同时进行 配置 创建队列创建交换机队列和交换机绑定routingKey 创建消息发送者 发送消息到队列或交换机 创建消息接受者 RabbitListener(queues队列名字/交换机名字) 监听队列或交换机接受消息 消息传播消息-交换机-队列 Exchange 交换机和队列绑定Key、无key、key-value 发送消息到交换机匹配成功队列才会收到消息 四种交换机模式 Direct Exchange按照routingkey分发到指定队列Topic Exchange多关键字匹配发给多个队列交换机和队列通过routingkey绑定 发送消息到交换机时交换机key和队列key若匹配则消息发送到队列Fanout Exchange广播模式无routingkey的概念和交换机绑定的队列都能获得消息Headers Exchange 交换机和队列通过key-value绑定 发送消息时key-value匹配队列全部满足或者满足任何一个队列才会收到消息 安全优化 方案 秒杀接口地址隐藏防止明文暴露提前抢票、黄牛机器人抢票数学公式验证码保护获取秒杀地址的接口分散请求接口限流防刷保护防止恶意刷接口 前端页面限制防君子不防小人主要防止用户出错 Http明文url可以提前拿到防止恶意刷接口 思路 点击秒杀之前先输入验证码分散用户的请求 添加生成验证码的接口在获取秒杀路径的时候验证验证码ScriptEngine使用 秒杀接口地址隐藏 思路秒杀开始之前先去请求接口获取秒杀地址 秒杀接口改造带上PathVariable参数添加生成地址的接口秒杀收到请求先验证PathVariable 获取秒杀地址的接口也可能暴露通过验证码验证 逻辑请求生成地址接口、返回path、秒杀接口拼接path真正接口、访问真正秒杀接口、先验证path 隐藏秒杀地址可以有很多种实现方式上述只是一种实现方式还可以 接口可以返回302跳转到新的页面新的页面才是真正的秒杀页面 接口可以返回一个页面的url让浏览器跳转到这个新的url页面新的页面才是真正的秒杀页面活动开始前和活动开始后是两个完全不同的页面这样就可以防止提前抓取网页了为了防止恶意用户提前抓取网页对网页进行分析然后写出刷接口的机器人工具。活动开始之前恶意用户就算分析网页写了刷接口的程序也没用因为那个页面并不是真正的秒杀页面。 数学公式验证码 思路点击秒杀之前先输入验证码分散用户的请求防止机器人 添加生成验证码的接口答案写入缓存在点击秒杀获取路径的时候去验证验证码防止暴露获取动态路径 path 的地址ScriptEngine使用 逻辑 页面生成验证码同时验证码答案写入缓存keyuerIdgoodsId有效时间用户输入验证码点击按钮访问生成地址接口获取秒杀路径验证用户输入和缓存验证验证成功后删掉缓存防止再次使用然后生成path验证成功后才生成path返回访问真正秒杀接口 使用验证码目的 防止机器人刷票软件延缓请求错峰请求秒杀接口保护作用验证码不对直接返回错误代码。防止 获取秒杀地址接口 暴露 接口限流防刷 拦截器和缓存实现设置缓存有效期内限制访问次数过期失效重新限制 首先自定义方法注解放到秒杀接口的方法上接着注册拦截器并覆写方法服务器接到请求时拦截器会先拦截请求并获得注解然后在覆写的方法中进行逻辑判断 逻辑 查询访问次数查询缓存为null设置缓存不为null 小于等于限制次数1大于限制次数返回失败 拦截器写通用方法 自定义注解接口加上注解 // 5秒钟最大访问次数限制5次需要登录 AccessLimit(seconds5, maxCount5, needLogintrue) Retention(RUNTIME) Target(METHOD) public interface AccessLimit {int seconds();int maxCount();boolean needLogin() default true; } 自定义拦截器获取注解信息进行限制 拦截器在参数解析器前执行都需要在WebMvcConfigurer中注册 ThreadLocal存放数据到当前线程每个线程单独一份 常见的限流算法 在网关上做限流。比如在nginx上写lua脚本来实现在应用上做单机限流。使用诸如基于Guava的RateLimiter令牌桶的方式在应用上做分布式限流。比如redisson提供了个基于redis的RateLimiter如果是SpringCloud项目可用的就更多了比如SpringCloud GatewaySentinel等等。 服务端优化 Tomcat 内存优化 -Xms2048M 最小内存-Xmx2048M 最大内存都设为 2G-XX:HeapDumpOnOutOfMemoryError;-XX:HeapDumpPath$CATALINA_HOME/logs/heap.dump;内存溢出时将内存映像放到$CATALINA_HOME/logs/heap.dump 文件方便定位问题。 并发优化 maxConnections服务器支持最大并发连接数量acceptCount当服务器的并发连接数都在使用时会有一个队列来存放新来的请求队列满时接收到的任何请求都将被拒绝maxThreads最大工作线程数minSpareThreads最小空闲的工作线程autoDeploy 指 Tomcat 在运行时是否应该定期检查新的或更新的 web 应用程序禁用提高性能。reloadable监视 WEB-INF/classes/ and /WEB-INF/lib 中的类并在检测到更改时自动重新加载 web 应用程序可以设置为 true/false。 APR 优化 Tomcat 的 BIO、NIO、APR 模式默认 NIO 模式 APRApache HTTP 服务器的支持库。可以简单地理解为Tomcat 将以 JNI 的形式调用 Apache HTTP 服务器的核心动态链接库来处理文件读取或网络传输操作从而大大地提高 Tomcat 对静态文件的处理性能。Tomcat APR 也是在 Tomcat 上运行高并发应用的首选模式。 nginx 反向代理 反向代理到集群server_pool_miaosha;配置多台服务器localhost、otherserver等 负载均衡 服务器按照权重分配请求数量如上图weight1均分请求max_fails2最大失败次数判断服务器是否存活超过次数认为服务器挂掉不会分配请求了
http://www.tj-hxxt.cn/news/231441.html

相关文章:

  • 郑州网站优化服务wordpress super 缓存
  • 宁波网站建站推广wordpress如何设置404页面跳转
  • iis网站怎么做全站伪静态网页设计与网站建设在线考试石油大学
  • 网站加速代码移动网站设计心得
  • 烟台网站建设设计西安企业建站排名
  • 网站建设网站制作做网站多少钱西宁君博美评
  • 网络设计课程总结网络优化公司哪家好
  • 网站 手机版 电脑版 怎么做国外服务器免费ip地址
  • 东莞门户网站建设东莞人才市场最新招聘信息
  • ipad怎么制作网站七冶建设集团网站
  • 嘉兴定制型网站建设免备案的网站
  • 山西龙采网站建设合同电子商务网站开发 什么框架
  • 龙江网站开发大连建设执业资格注册中心网站
  • 重庆渝北网站建设悟空建站seo服务
  • 免费制作音乐的软件app济南网站建设seo优化
  • 企业网站首页代码html网站更新
  • 网站建设案例策划蚌埠网站制作
  • 百度申请完域名怎么建设网站在沈阳做一个展示网站多少钱
  • 深圳做网站电话网络服务机构
  • 网站二级域名是什么视频模板套用免费
  • 潍坊哪家做网站做的最好网站常用的一种js幻灯片
  • 网络推广网站排名wordpress做表格插件
  • 阿里手机网站开发框架浙江温州乐清
  • 设计的有趣的网站网站免费软件
  • 如何学习网站开发编程定海建设规划网站
  • 上海网站备案广州网站建设咨询电话
  • 网站建设浙江如何做流量网站
  • 吴中区网站建设技术中山医疗网站建设
  • 怎么做兼职网站吗seo交流网
  • php网站好做seo经营性 网站备案