- 博客(392)
- 收藏
- 关注
原创 【总结】kubernates crd client-java 关于自定义资源的增删改查
try {result =log.info(+ ": "CustomObjectsApi 去获得指定的某一个自定义资源try {} else {log.info(+ ": "group,version,namespace,plural,CustomObjectsApi去创建一个自定义的资源try {log.info(+ ": "return;CustomObjectsApi删除指定的自定义资源。
2023-10-09 15:14:49
1040
原创 使用 crd.yml 和 kubernetes CRD 自动生成 Java model 类
官网文档讲怎么从自定义的资源生成 java model 类链接;
2023-09-18 16:36:55
529
原创 【分布式系统案例课】查询服务设计、计数栈选型、总结
显然我们需要对这个系统进行性能和压力测试。1、定位性能、内存和多线程问题。2、为生产部署进行容量估算。通过对小规模集群进行性能测试,可以获得基准性能数据,从而估算出了应对生产的流量,包括考虑高峰期的流量,我们需要申请多少的软硬件资源。
2023-07-19 18:29:26
1194
原创 【分布式系统案例课】计数服务之计数服务设计
用户点击观看视频,请求先辈转发到 API 网关,API 网关将请求转发到 Counting Service, Counting Service 是通过MQ Client将请求转发到MQ 的某个分区队列,在后台 Counting Consumer 消费对应的 MQ 分区的消息进行聚合运算,最终将结果写入DB。如果DB Writer 每次都到其他的DB去查询数据性能会比较慢,可以引入缓存 Enchrich Data Cache ,这个缓存可以是Redis 缓存,也可以是消费者本地嵌入式的缓存。
2023-07-19 14:51:33
670
2
原创 【分布式系统案例课】计数服务之存储设计
Sharding Proxy 本身需要高可用部署,所以前置一般需要引入负载均衡设备来支持,例如 F5 或者软件 HAProxy。Sharding 只是解决了分摊负载的问题,高可用还要用数据复制 replication ,主从复制之后还可以进一步读写分离,写入数据写到主库上,读取数据从从库上读取。然后为了满足扩展性需求,考虑对数据库进行分区存储 Sharding ,实现按需扩展。为了屏蔽Sharding 和主从复制引入的复杂性,需要引入数据库访问代理 ,访问代理可以直接以客户库的形式嵌入到应用程序中。
2023-07-13 14:22:20
345
原创 【分布式系统案例课】计数服务之需求收集和总架构设计
技术问题是一个比较普遍的问题,比如对头条作者的粉丝或者是对获赞进行计数。非功能需求对系统的架构和设计是非常重要的。问题一:用户点击观察视频之后,这个数量要隔多久要求被更新,是一分钟?用户点击观看一个视频,一分钟之后刷新视频,就可以看到这个视频的观看数被更新了。这个问题决定该系统是一个线下的批处理系统,还是一个实时或者近实时的处理系统。分布式系统的核心是数据,所以我们可以从数据存储开始。有两条路径:一条是写入路径,一条是读取路径。问题二:预期的99百分位请求的延迟是多少?所以这是一个近实时的最终一致的系统。
2023-07-13 11:29:17
209
原创 UNION 和 UNION ALL 用法及区别
排序结果:UNION 默认会对合并后的结果集进行排序,以确保返回的结果是按照默认顺序排列的。它的作用是将多个查询的结果集合并为一个结果集,包含所有查询的结果,不去除重复行。总结起来,UNION ALL 是用于合并多个查询结果集的操作符,它保留所有行,不去除重复的行,适用于需要合并结果集并且不需要去重的场景。它的作用是将多个查询的结果集合并为一个结果集,并去除重复的行。上述示例中,UNION 操作符将 table1 和 table2 的查询结果合并为一个结果集,并去除重复的行。连接,sql 和结果如下。
2023-07-10 11:19:58
10576
原创 微服务保护之初识Sentinel、流量控制、隔离和降级、授权规则、规则持久化
什么是雪崩问题?微服务之间相互调用,因为调用链中的一个服务故障,引起整个链路都无法访问的情况。限流是对服务的保护,避免因瞬间高并发流量而导致服务故障,进而避免雪崩。是一种预防措施。超时处理、线程隔离、降级熔断是在部分服务故障时,将故障控制在一定范围,避免雪崩。是一种补救措施。Sentinel是阿里巴巴开源的一款微服务流量控制组件。官网地址:https://sentinelguard.io/zh-cn/index.htmlSentinel 具有以下特征:•丰富的应用场景。
2023-05-19 15:02:02
865
原创 【RabbitMQ】SpringAMQP
基本消息队列的消息发送流程:建立connection创建channel利用channel声明队列利用channel向队列发送消息基本消息队列的消息接收流程:建立connection创建channel利用channel声明队列定义consumer的消费行为handleDelivery()利用channel将消费者与队列绑定Work模型的使用:多个消费者绑定到一个队列,同一条消息只会被一个消费者处理通过设置prefetch来控制消费者预取的消息数量。
2023-05-09 17:49:36
796
原创 Spring Data Jpa pessimistic locking
我们可以保留两种类型的锁:独占锁和共享锁。我们可以使用“SELECT … FOR UPDATE”语句获取独占锁。
2023-05-06 14:10:06
908
原创 【OAuth2.0 Client 总结】对接github第三方登录以及其他第三方登录总结
之前搞 oauth 登录一直没有搞好,客户端、授权服务端、资源端一起搞对于我刚接触的小菜鸡来说,难度有点大。然后就先搞了个 Client 端对接 Github 登录。网上关于 Github 登录的资料有很多,而且框架对 Github 集成的也很好,配置起来并不麻烦。
2023-04-20 19:14:33
1587
原创 大话设计模式-原型模式
原型模式主要就是浅复制和深复制的区别。一个类A中都是一些基础类型的话,将类A实现接口ICloneable, 就可以实现类A的复制,但是如果类A中有其他类的引用,例如对类B的引用。再使用上面的浅复制就不行了。因为类B在类A中的复制就是引用复制,实际指向的还是同一个对象。
2023-03-12 15:07:28
177
原创 模版方法模式
模版方法模式就是我们做一件事情是有清晰的步骤,但可能中间的某个步骤的具体内容因人而异,将这个不确定的步骤的实现放到子类去实现。例如我们去ktv唱歌,步骤都是先服务员领着我们去房间,然后我们点歌,之后付账。但是每个顾客点的歌肯定是不一样的,所以对于这个操作我们就可以将它放到子类具体的某个顾客去实现。我们的模版方法就是进房间、点歌、付账。模版方法模式就是将不变的行为搬移到超类,去除子类中的重复代码来体现它的优势模版方法模式就是提供一个很好的代码复用平台。
2023-03-12 15:06:32
108
原创 简单工厂模式与工厂模式的区别
以下内容为看《大话设计模式》的学习笔记从一个简单的例子引入:学习雷锋做好事。雷锋是一个称号,不同的人群都可以成为雷锋,例如学生、志愿者等工厂方法克服了简单工厂违背开放-封闭原则的缺点,又保持了封装对象创建过程的优点它们都是集中封装了 对象的创建,使得更换对象时,不需要做大的改动就可以实现,降低客户程序与产品对象的耦合思考:使用简单工厂和工厂模式分别实现计算器。
2023-03-12 15:04:46
195
原创 大话模式学习笔记(简单工厂模式、策略模式、单一职责)
最近在看《大话设计模式》,做一点总结总结吧。之前也进行学习过设计模式,但是都是讲该设计模式是什么,包含哪些元素,再配合一点简单的demo,理解很不深刻。最近又重新学一下。
2023-02-17 16:21:39
425
原创 SQL 中的窗口函数
SQL 中的窗口函数(Window Functions)是一种特殊的函数,它可以在查询结果的某个区间内执行计算,而不仅仅是对单个行进行计算。
2023-02-17 14:33:04
3218
转载 SpringBoot validation
}我们在这里对局部变量定义使用注释。编译时注释处理器现在可以读取@NotNull注释并在字符串为空时抛出错误。
2022-11-07 11:17:28
189
原创 Java Features Java 8
}我们在这里对局部变量定义使用注释。编译时注释处理器现在可以读取@NotNull注释并在字符串为空时抛出错误。
2022-07-22 14:10:00
553
原创 Mocking with (and without) Spring Boot
在使用@WebMvcTest注解的时候,创建的应用程序上下文不会选择程序中原有的bean,我们使用@MockBean注解模拟并将其添加到应用程序上下文中。在使用@SpringBootTest注解的时候会加载程序中所有的应用程序上下文的bean,我们这是使用@MockBean是为了创建一个模拟的bean将测试使用这个摸你的而不是真实的。...
2022-07-22 14:09:30
326
原创 关于使用 Jackson 解析 JSON 你需要知道的一切
今天的大多数网络都以JSON格式交换数据。Web服务器、Web和移动应用程序,甚至物联网设备都使用JSON相互通信。因此,一种简单灵活的处理JSON的方式对于任何软件在当今世界的生存都是必不可少的。...
2022-07-22 14:08:57
1388
原创 DGS的错误处理
将应用程序特定的异常映射到有意义的异常回客户端是很有用的。您可以通过注册DataFetcherExceptionHandler来做到这一点。确保委托给DefaultDataFetcherExceptionHandler类,这是框架的默认异常处理程序。如果你不委托给这个类,你就会失去框架的内置异常处理程序。以下是自定义异常处理程序实现的示例。}else{}}}以下数据提取器抛出MyException}}查询hello字段会产生以下响应。{"errors"[{...
2022-07-22 14:08:17
1444
原创 DGS之联邦(Federation)
ShowsDGS定义了带有id、title和releaseYear字段的Show类型。请注意,id字段被标记为关键。这个例子有一个键,但你也可以有多个键@key(fields“fieldAfieldB”这表明网关的id字段将被用于识别ShowsDGS中的相应的Show,并且必须指定联合类型。String)"id"){idIDtitleInt}...
2022-07-22 14:07:47
994
原创 DGS之代码生成
类型是作为packageName.types指定的包的一部分,其中你指定packageName的值作为build.gradle文件中的配置。ANTLR通常是向后兼容的,但不是向前兼容的。建议在你的项目中创建一个单独的模块,包含外部服务的模式和codegen配置,只生成一个查询API。在与另一个GraphQL服务交互时,同样类型的API也很有用,你的代码是该服务的客户端。你可以将模式的某些部分排除在代码生成之外,方法是将它们放在一个不同的模式目录中,该目录不作为插件的schemaPaths的一部分被指定。..
2022-07-22 14:07:00
536
原创 DGS之N+1选择问题
假设你有一个汽车对象的集合(数据库行),而每个汽车都有一个车轮对象的集合(也是行)。换句话说,汽车→车轮是一个1对多的关系。现在,假设你需要遍历所有的汽车,并为每个汽车打印出一个车轮的列表。这就把到数据库的往返次数从N+1减少到2。汽车进行第二次查询(总共2个查询)。现在打印出来是最佳的,不需要索引或辅助存储。换句话说,你有一个关于汽车的选择,然后有N个额外的选择,其中N是汽车的总数。车轮(1个选择),如果需要比CarId更多的详细信息,请对。另外,我们也可以得到所有的轮子,并在内存中进行查找。...
2022-07-21 17:14:44
203
原创 DGS之文件上传
在GraphQL中,你将文件上传操作建模为从客户端到DGS的GraphQL变异请求。以下章节描述了如何使用MultipartPOST请求实现文件的上传和下载。关于文件上传的更多内容和最佳实践,请看Apollo博客中KhalilStemmler的Apollo服务器文件上传最佳实践。...
2022-07-21 17:13:59
775
原创 DGS之Mutations
DGS框架支持突变,其结构与数据提取器相同,使用@DgsData注解。下面是一个突变的简单例子。注意,上面的代码通过,就像数据提取器为其参数所做的那样。
2022-07-21 17:13:27
365
原创 DGS初识
在这个例子中,源是表演对象,你可以用它来获取表演的标识符,以便在演员的查询中使用。请注意,showsdatafetcher返回的是一个Show的列表,而actorsdatafetcher获取的是一个单一节目的演员。如果你使用的是代码生成,你可以使用生成的常量来代替。你也可以将你自己的数据添加到上下文中,以便在数据获取器中使用。@InputArgument注解将使用方法参数的名称与查询中发送的输入参数的名称相匹配。这意味着,当字段在GraphQL模式中是可选的时候,你必须确保在数据类中使字段是可选的。...
2022-07-21 17:12:33
1467
原创 第七章、测试架构元素
在我目睹的许多项目中,自动化测试是一个谜。每个人都按照他或她认为合适的方式来写测试因为这是在wiki中记录的一些灰尘规则所要求的,但是没有人能回答关于团队测试策略的有针对性的问题。本章提供了一个六边形体系结构的测试策略。对于体系结构中的每个元素,我们将讨论要覆盖它的测试类型。...
2022-07-21 17:08:32
468
原创 第四章、实现用例
最后,让我们看看如何在实际代码中体现我们所讨论的架构。由于在我们的架构中,应用层、网络层和持久化层是松散耦合的,我们可以 我们完全可以按照我们认为合适的方式对我们的领域代码进行建模。我们可以做DDD,我们可以实现一个丰富的或贫乏的领域模型,或者发明我们的领域模型。贫乏的领域模型,或者发明我们自己的做事方式。本章介绍了在六边形架构中实现用例的一种有主见的方式。架构风格中实现用例的一种观点,我们在前几章中已经介绍过。正如以领域为中心的架构所适合的那样,我们将从一个领域实体开始,然后围绕它建立一个用例 围绕
2022-07-21 17:07:46
802
原创 第六章、实现一个持久性适配器
在第1章中,我对传统的分层架构大加挞伐,并声称它支持“基于数据库的设计”,因为归根结底,一切都取决于持久化层。在这一章中。我们将看看如何使持久化层成为应用层的插件,以颠覆这种依赖性。...
2022-07-21 17:06:40
246
原创 第五章、实现Web适配器
在我们的目标体系结构中,所有与外部世界的通信都通过适配器进行的。所以,让我们来讨论如何实现一个提供这样一个web界面的适配器。
2022-07-21 17:06:01
517
原创 第三章、组织代码
在本章中,我们将研究组织代码的不同方式,并介绍一个直接反映六边形体系结构的表达式包结构。在新建的软件项目中,我们首先要做的是做好软件包的结构。我们建立了一个漂亮的结构,并打算在项目的其余部分使用。然后,在项目进行过程中,事情变得紧张起来,我们意识到在许多地方,包的结构只是一个漂亮的门面,而非结构化的混乱代码。一个包中的类从其他包中导入了不应该被导入的类。...
2022-07-21 17:05:30
289
原创 GraphQL初识
GraphQL官网学习示例graphiql:是否启用graphiql的调试界面,上线之后要改为falsenodemon自动监视代码访问http://localhost:4000/graphql基本类型: String, Int, Float, Boolean和ID。可以在shema声明的时候直接使用。⚠️ID是字符串类型要求唯一[类型]代表数组,例如: [Int]代表 整型数组和js传递参数一样,小括号内定义形参,但是注意:参数需要定义类型。!(叹号)代表参数不能为空。代码示例:GraphQL允许用户
2022-07-08 15:15:55
689
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人