技术中台与终搜——2 索引映射OpenAPI定义索引(映射)接口/***索引操作接口*///新增索引+映射定义索引(映射)实现@Override//创建索引请求//获取下游业务参数//循环参数//设置settings参数//设置mapping参数//创建索引操作客户端//创建响应对象新增控制器/***索引操作控制器*/@Autowired//构造返回下游业务数据//增加索引(映射)是否成功try{//通过接口调用远程结构化查询方法。
spring、springmvc、springboot的关系 Spring是一个开源的、轻量级的Java开发框架,它最初由Rod Johnson在其著作中提出,旨在解决企业应用开发的复杂性。Spring框架基于IoC(控制反转)和依赖注入(DI)原则,通过简化和模块化开发过程,帮助开发人员构建灵活、可扩展和可维护的应用程序。Spring框架包含了许多子项目,如Spring MVC、Spring JDBC、Spring AOP等,这些子项目共同提供了丰富的功能支持。
技术中台与终搜——1 中台是介于前台和后台中间的平台(基础中间件),有点像编程时的适配层,起到承上启下的作用。当组织架构太深了,前台后台隔得太远,沟通成本太高时,通过中台可以一定程度上来解决这个问题。终搜平台是技术中台的一种体现;比如统一OSS,自动化配置、统一监控、统一登录平台、CICD&一站式终搜平台都是技术中台的实现。服务名称端口查询服务8888分析服务5555网关服务6666logstash9600kibana5601mysql3306nacos18848–>8848nacos2。
利用logstash同步100万MySQL数据到es 容器创建的时间跟系统时间差了八小时,通过测试可以得出结果,因容器启动也需要时间,所以同步100万数据的大概时间是20分钟左右。由于是本地测试,网络波动不是很大,如果是远程服务器测试,需要的时间大约是30分钟左右。
docker-compose搭建ES 7.14.0集群、Kibana 7.14.0、cerebro和logstash 7.14.0 尝试重启kibana,这个问题是在docker中连接不到es下一篇文章给大家带来logstash同步100万mysql数据到es的案例。
千万级订单的生成方案 下订单过程,业务极其复杂,不只是订单号的生成插入,除了订单系统,还可能涉及库存系统,促销系统,支付系统,结算系统,积分系统,同时可能有下游的订单统计中心。如果是上面的补单,支付金额就需要作为差价记录实际支付金额,条目标记为换货差价 涉及分期支付,对应多笔支付单,形成虚拟条目标注支付内容。下单减库存的,要注意超时取消,大订单量及分库分表条件下,扫表方案不可取,应该设计为延迟消费支付减库存的,不需要额外处理。多为强依赖的关联,使用分布式框架,基于框架层面的重试机制,接口幂等设计,保障数据的最终一致性。
业务幂等性技术——3 在系统中当使用消息队列时,无论做哪种技术选型,有很多问题是无论如何也不能忽视的,如:消息必达、消息幂等等。本章节以典型的RabbitMQ为例,讲解如何保证消息幂等的可实施解决方案,其他MQ选型均可参考。
业务幂等性技术——2 对于防止数据重复提交,还有一种解决方案就是通过防重表实现。防重表的实现思路也非常简单。首先创建一张表作为防重表,同时在该表中建立一个或多个字段的唯一索引作为防重字段,用于保证并发情况下,数据只有一条。在向业务表中插入数据之前先向防重表插入,如果插入失败则表示是重复数据。对于防重表的解决方案,可能有人会说为什么不使用悲观锁。悲观锁在使用的过程中也是会发生死锁的。悲观锁是通过锁表的方式实现的。假设现在一个用户A访问表A(锁住了表A),然后试图访问表B;另一个用户B访问表B(锁住了表B),然后试图访问表A。
业务幂等性技术——1 幂等本身是一个数学概念。即f(n) = 1^n,无论n为多少,f(n)的值永远为1。在编程开发中,对于幂等的定义为:无论对某一个资源操作了多少次,其影响都应是相同的。换句话说就是:在接口重复调用的情况下,对系统产生的影响是一样的,但是返回值允许不同,如查询。幂等性不仅仅只是一次或多次操作对资源没有产生影响,还包括第一次操作产生影响后,以后多次操作不会再产生影响。并且幂等关注的是是否对资源产生影响,而不关注结果。此SQL无论执行多少次,虽然结果有可能出现不同,都不会对数据产生改变,具备幂等性。
12.面试题——Spring Boot Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。
11.面试题——消息队列RabbitMQ RabbitMQ是一种开源的消息队列中间件,用于在应用程序之间进行可靠的消息传递。它实现了AMQP(Advanced Message Queuing Protocol)协议,提供了强大的消息处理能力。
Java中锁的类别 乐观锁是一种乐观思想,假定当前环境是读多写少,遇到并发写的概率比较低,读数据时认为别的线程不会正在进行修改(所以没有上锁)。写数据时,判断当前 与期望值是否相同,如果相同则进行更新(更新期间加锁,保证是原子性的)。Java中的乐观锁: CAS,比较并替换,比较当前值(主内存中的值),与预期值(当前线程中的值,主内存中值的一份拷贝)是否一样,一样则更新,否则继续进行CAS操作。
10.面试题——JVM JVM,也就是 Java 虚拟机,它是 Java 实现跨平台的基石。Java 程序运行的时候,编译器会将 Java 源代码(.java)编译成平台无关的 Java 字节码文件(.class),接下来对应平台的 JVM 会对字节码文件进行解释,翻译成对应平台的机器指令并运行。同时,任何可以通过 Java 编译的语言,比如说 Groovy、Kotlin、Scala 等,都可以在 JVM 上运行。
8.面试题——Mybatis Mybatis是一种流行的Java对象关系映射(ORM)框架,它将Java对象映射到关系型数据库中的表格。它提供了一种简单的方式来编写SQL语句并将其映射到Java对象,同时避免了很多传统JDBC的冗长代码。在使用Mybatis时,开发人员可以编写简洁的SQL语句,并且可以使用动态SQL和参数映射来进行高效和灵活的数据操作。除了ORM之外,Mybatis还提供了许多高级功能,如缓存机制、批量操作、分页等等。
7.面试题——Spring MVC Spring MVC是Spring框架中的一个模块,它基于MVC(模型-视图-控制器)设计模式,为Web应用程序提供了一个全面的解决方案。Spring MVC作为一种轻量级的Web框架,主要用于构建Web应用程序的表述层(也称为表现层或前端控制层)。它通过将应用程序的不同部分(如数据访问、业务逻辑和表现层)分离,提高了应用程序的可维护性和可扩展性。
6.面试题——Spring Spring是一个轻量级的IoC和AOP容器框架。是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。常见的配置方式有三种:基于XML的配置、基于注解的配置、基于Java的配置。