随笔分类 - 项目实战
摘要:一、系统可用性常见策略及实现 (一)服务不可用问题和基本对策 服务访问失败原因有很多,例如分布式环境的固有原因、服务自身失败、服务依赖失败等。 其中分布式环境的固有原因是指在分布式环境中存在的的网络连接等问题,服务自身失败是自己代码编写的问题,这里着重解决服务依赖失败的问题。 如下图所示
阅读全文
摘要:## 一、Spring Security认证和授权 ### (一)安全性和Spring Security框架 1、从一个安全性应用场景说起 如下图所示,工单的生成需要使用用户的订单记录等数据,而这些数据保存在外部平台中;那么就需要用户将自己在订单管理平台上用户名和密码告诉工单系统,工单系统登
阅读全文
摘要:## 一、使用Nacos实现集中式配置管理 ### (一)配置中心模型 在微服务架构中,存在着多环境、多服务、多实例(集群化)的情况,那么就需要将一些配置信息集中的放在一个地方做统一管理,这就是配置中心的原型。 对于配置中心来说,要保证其隔离性、一致性、安全性和易管理性,隔离性是指如果有多个
阅读全文
摘要:## 一、微服务架构体系 ### (一)微服务架构基本概念 1、微服务三大要素 微服务不是一个纯技术概念,微服务架构三大要素:业务建模、技术体系、研发过程 (1)业务建模:业务架构 + 功能边界 对于一个复杂的业务而言,要想把它构建成微服务系统,就需要将系统进行拆分,拆分的前提就是要
阅读全文
摘要:## 一、使用分布式缓存Redis ### (一)分布式缓存和Redis 1、多级缓存 在一个简单的请求链路中,会经过Nginx、Redis、Tomcat、数据库,其中Nginx、Redis、Tomcat都有缓存存在,这也是常说的多级缓存。 2、缓存的作用与应用场景 使用缓存主要
阅读全文
摘要:## 一、事件驱动架构和原理 ### (一)事件驱动架构组成结构 1、事件和事件驱动架构 但凡在业务需求中出现如“当…发生…时、一旦出现…”等,描述时,我们就应该考虑是否需要在这些场景中引入事件。 所谓事件(Event),就是将系统中所发生的业务状态变更抽取出来形成一系列独立的对象。
阅读全文
摘要:一、使用Elastic Stack构建搜索能力 (一)搜索场景和解决方案 搜索是互联网系统的底层基础能力。 1、搜索引擎的基本特性和应用场景 搜索引擎的业务特征:以文本为中心,以读取为主操作,面向文档,灵活的、非结构化数据模式、内容关联性 搜索引擎的技术特征:海量文档数据、可扩展、容
阅读全文
摘要:一、引入ShardingSphere (一)分库分表理论和解决方案 1、对于 IM 聊天记录的存储的选型: 关系型数据库仍然是业务数据基石,因为关系型数据存有稳定性、可靠性和事务性的优势 但是如果用关系型数据库,就会存在单表容量问题:如MySQL单表千万级 为了解决单表瓶颈问题,就需
阅读全文
摘要:一、Netty和网络通信 (一)Netty框架简介 1、BIO 存在性能问题、可靠性问题、可维护性问题 BIO的核心问题是同步阻塞 public void service() throws IOException { ServerSocket serverSocket = new S
阅读全文
摘要:一、分布式服务体系 (一)分布式系统概述 单体系统存在业务扩展性(任何业务的调整都需要发布整个系统)、性能扩展性(动态扩容对单体系统而言效率低下)、代码复杂度(修改一处代码容易引发连锁反应)的问题。 系统扩展性,指的是当系统的业务需求发生变化时,我们对现在系统改动程度的一种控制能力。改动程度
阅读全文
摘要:一、构建多租户机制 (一)多租户机制的设计方法 多租户是实现如何在多用户环境下共用相同的系统或程序组件,并且可确保各用户间数据的隔离性,多租户技术在共用的数据中心以单一系统架构与服务提供多数用户相同甚至可定制化的服务。场景可以分为业务集成(医院HIS系统/电商供应商对接)、开放平台(天气/地图/导航
阅读全文
摘要:一、使用Mybatis-Plus对数据访问进行扩展 1、MyBatis-Plus开发模式 (1)为什么用Mybatis-Plus Mybatis的问题: 通过原生SQL语句操作业务数据,自动化程度不高;通过繁杂的XML配置来映射字段和属性,影响开发效率;对字段名称的识别和校验不友好,易出错且
阅读全文
摘要:一、使用Springboot开发 WebAPI 1、Maven使用 (1)packaging的使用 通常的做法是先指定一个pom文件,做一个整体的框架,然后在pom中添加不同的子项目。 那么在父工程的pom文件中就需要指定packaging为pom <groupId>com.lcl.gala
阅读全文
摘要:一、梯度压测 (一)压测配置 梯度压测主要是用来分析接口性能瓶颈,主要的四种性能指标:响应时间、并发用户数、吞吐量、资源使用率。它们之间存在一定的相关性,共同反映出性能的不同方面。 压测接口(http://IP:9001/spu/goods/10000005620800):响应时间20ms,响应数据
阅读全文
摘要:一、应用性能问题分析方法论 性能优化的终极目标:用户体验 = 产品设计(非技术) + 系统性能 ≈ 系统性能 = 快 应用性能调优是个大工程,包括指标、和影响因素。 指标可以从web端(首屏时间、白屏时间、可交互时间、完全加载时间...)、移动端(端到端响应时间、Crash率、内存使用率、FPS(每
阅读全文
摘要:一、订单业务复杂度分析 对于订单系统来说,业务复杂度主要体现在流程复杂、状态多、状态转换复杂等问题。 1、流程设计 从流程上说,订单系统有下单流程、退款流程、退货流程、换货流程、业务对账、业务订正等场景,场景复杂。 2、状态设计 对于各种状态以及各种状态的转换,使用状态机进行处理,同时这么多的状态,
阅读全文
摘要:电商订单系统主流程主要是正向的下单和逆向的售后,除了这两个核心场景外,还有统计分析、结算、对账等 1、售前订单 售前订单主要是指正向流程的订单。 (1)订单信息 订单信息主要包括商品信息、基础信息、金融信息、配送信息、支付信息、附加信息、订单状态等。 (2)预创建订单 什么时间生成订单号,可以在实际
阅读全文
摘要:一、问题概述 在实际业务中,有一个相对耗时的操作,但是客户端又需要急速响应,一般的处理就是使用缓存,但是这个处理如果涉及事务问题,那么就比较麻烦,一般情况下会使用消息队列,对简要数据做入库,后续的操作消费队列进行处理,这里就有个问题,就是前置的事务和消费消息的事务不是原子操作,那么就可能存在操作不一
阅读全文
摘要:一、业务场景分析 在实际开发中,我们需要使用到锁,来防止并发问题,以秒杀为例,如果没有锁的处理,就会发生超卖的问题,超卖问题的出现,是由于多线程并发处理,一个事务未提交,但是另外的线程来查询时,可以查询到仍有库存,就会发生超卖。 解决这类问题,一般有三种方案: 1、使用锁处理 也就是让所有的操作都串
阅读全文
摘要:一、数据库瓶颈解决方案 在大流量时,数据库会成为系统瓶颈,其总体的解决方案如下: 1、项目架构使用缓存,90%请求拦截上游服务器 ———— 读操作 2、数据归档处理 (把一些用户不访问的数据直接归档处理,缓解数据库压力)--使用master ,slave架构 3、停机扩容 影响数据库性能因数: 1、
阅读全文