- 博客(73)
- 资源 (3)
- 收藏
- 关注
原创 领域驱动设计CQRS落地
在DDD的原则里,repository操作的都是聚合根,repository的作用就是把内存中的聚合根持久化,或者把持久化的数据还原为内存中的聚合根。没有特殊考虑的话,建议一个微服务一个数据库,但是由于目前我们不动数据库,所以还是共用一个数据库,但是代码层面要把他当成不同数据库来对待,不同微服务的数据访问,一定要通过不同微服务所暴露的服务来获取,不可以直接操作其他微服务的数据表。基础层包含基础服务,它采用依赖倒置设计,封装基础资源服务,实现应用层、领域层与基础层的解耦,降低外部资源变化对应用的影响。
2023-08-07 08:36:07
390
原创 Hbase+Geomesa集群搭建部署图
案例部署方案图案例资源说明服务名称IP运行内存硬盘大小CPUHadoop-1、HBase、GeoMesa192.168.62.302GB20GB酷睿i7-2820QM @ 2.30GHz 单核Hadoop-2、HBase、GeoMesa192.168.62.312GB20GB酷睿i7-2820QM @ 2.30GHz 单核Hadoop-3、HBase、GeoMesa192.168.62.322GB20GB酷睿i7-2820QM @ 2.30
2020-05-25 17:43:16
999
1
原创 PostgresSQL+postgis+timescaledb 集群搭建部署图
官方PostgresSQL集群部署架构图各组件说明VIP:虚拟IP,用于连接集群数据库Pgpoll:pg连接池,有负载均衡的作用PostgreSQL:数据库,整个集群的核心插件说明timescale:一个时序插件,专门用于处理时序数据postgis:一个空间插件,专门用于处理空间数据timescale+postgis: 时间+空间, 双剑合璧 - 时空数据库案例背景对现有轨迹存储方案,环境搭建,数据导入,数据测试,服务编写,测试结果对比性能分析纬度: 数据量,时间范围,空间范围,空
2020-05-25 10:53:30
4956
原创 ELK集群部署搭建
业内常用Elastic Stack的部署方案图各部件说明Beats: 一个收集器,可以收集日志文件、http数据包等等Kafka:消息队列,用来缓冲存放从Beats流向LogStash数据Redis:也用作消息队列(Zset),缓冲存放从Beats流向LogStash数据LogStash:数据的处理器,使用多个Filter对数据进行预处理或者丰富数据ElasticSearch:数据处理后的最终存储位置,用于数据的存储和索引查询Kibana:数据的可视化显示效果X-pack:对集群进行一个
2020-05-22 19:29:48
2006
1
原创 使用Seata实现分布式事物带来的分支事务回滚异常问题
1.场景说明使用Seata管理2个微服务的数据库添加操作,webSocketFeignService为另外个服务的feign调用 @Autowired private WebSocketFeignService webSocketFeignService; @Transactional @GlobalTransactional @Override...
2020-03-23 00:59:58
13261
9
原创 卡尔曼滤波对GPS轨迹数据清洗(Java实现)
引言由于本人学艺未精,此文章只是作为给自己笔记使用,不知道是否准确卡尔曼滤波的5条公式数学建模首先分析状态变量X(t),由于GPS位移和速度都分为水平和垂直水平接着分析状态偏移矩阵接着将上述式子转化成矩阵分析观测矩阵将状态量带入得Java编程实现 //数据清洗 public static List<ShipTrajectory> dataC...
2020-03-03 16:10:41
8776
25
原创 Redis Sentinel集群部署
单机 Redis Sentinel 架构部署规划主机地址作用127.0.0.:7000主节点127.0.0.:7001从节点127.0.0.:7002从节点安装rediswget http://download.redis.io/releases/redis-5.0.7.tar.gztar xzf redis-5.0.7.tar.gzcd...
2020-01-14 16:58:27
551
转载 k8s与HPA--通过 Prometheus adaptor 来自定义监控指标
自动扩展是一种根据资源使用情况自动扩展或缩小工作负载的方法。 Kubernetes中的自动缩放有两个维度:Cluster Autoscaler处理节点扩展操作,Horizontal Pod Autoscaler自动扩展部署或副本集中的pod数量。 Cluster Autoscaling与Horizontal Pod Autoscaler一起用于动态调整计算能力以及系统满足SLA所需的并行度...
2019-12-06 11:08:06
597
原创 Docker私有仓库搭建(Harbor)
安装环境需求安装dockersudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ ...
2019-12-06 10:47:41
223
原创 k8s三部曲(3)——监控部署prometheus+grafana
安装Prometheuskubernetest集群中创建namespace#编写namespace.yaml文件apiVersion: v1kind: Namespacemetadata: name: ns-monitor labels: name: ns-monitorkubectl apply -f namespace.yaml安装node-expo...
2019-12-06 09:49:10
1243
原创 基于k8s的微服务一键部署解决方案
父项目msagd配置编写pom.xml的属性标签<properties></properties> <properties> <!--私有docker仓库地址:ip:port--> <docker.image.host>docker.io</docker.image.host> <!--...
2019-12-06 09:47:40
1216
1
原创 k8s三部曲(2)——kubernetes(TSL)非主节点安装dashboard
环境准备安装规划节点IP角色安装的组件192.168.0.111Masteretcd、kube-apiserver、kube-controller-manager、kube-scheduler、cfssl、kubectl192.168.0.112Node1docker 、kubelet、kube-proxy、flanneld 、cfssl、kubectl...
2019-11-27 16:52:31
839
原创 k8s三部曲(1)——kubernetes 完整集群部署(二进制安装)
kubernetes 完整集群部署(二进制安装)1.准备环境安装环境 CentOS7 服务器 3台准备安装包etcd-v3.3.15-linux-amd64.tar.gzkubernetes-server-linux-amd64.tar.gzdocker-17.03.2-ce.tgzflanneld 0.7.1cfssl 1.2.02.安装规划节点IP角色...
2019-11-21 18:18:15
621
原创 Java并发编程的艺术——并发编程挑战及Java并发底层实现原理(一)
1.并发编程概念及问题上下文切换:任务从保存到再加载的过程就是一次从上下文的切换 串行与并发的耗时比较:当并发执行超过百万次时,速度比串行慢,因为线程有创建和上下文切换的开销 上下文切换次数和时长:每一秒切换1000多次1.1如何减少上下文切换方法有无锁并发编程、CAS算法、使用最少线程、使用协程 无锁并发编程:最直接的方法就是避免使用锁,如将数据的ID按照Hash算法取模分段,不...
2018-11-28 12:03:13
390
转载 java 模拟登陆(二)
在Java登录方正教务系统中,已经知道了如何登录到方正教务系统,以及在于服务器交互的过程中,Cookie的作用,还有隐藏字段_VIEWSTATE的作用,还处理了乱码问题,现在我们登录以后获取对应的课程表需要获取的数据通过火狐自带的抓包工具可以看到,点击信息查询->学生课表以后,浏览器通过GET方式提交xh(学号),xm(姓名),gnmkdm(固定值)等三个数据给服务器,下面我们来分别...
2018-11-17 17:18:54
475
转载 java 模拟登陆(一)
在正式开始之前,先来看看浏览器与服务器的通讯过程浏览器给服务器发送请求连接,服务器接收到浏览器发送的请求,在服务器端生成一个对应的标示(Session),并且返回这个标识的id(Cookie)给浏览器保存,以后浏览器每一次的请求都带着这个cookie,这样服务器就可以对应到相应的用户了登录流程第一步:访问教务处网址(本人教务处网址为http://218.197.80.27/),教务...
2018-11-17 16:26:37
1474
原创 Guns——使用Mybatis-plus的分页插件(五)
1.介绍常规分页方法物理分页: 物理分页依赖的是某一物理实体,这个物理实体就是数据库,比如MySQL数据库提供了limit关键字,程序员只需要编写带有limit关键字的SQL语句,数据库返回的就是分页结果。 逻辑分页:逻辑分页依赖的是程序员编写的代码。数据库返回的不是分页结果,而是全部数据,然后再由程序员通过代码获取分页数据,常用的操作是一次性从数据库中查询出全部数据并存储到List集合中,...
2018-11-14 12:21:31
3722
1
原创 Guns——使用全局异常拦截器(四)
1.什么是全局异常拦截器从实际使用来看,可以理解成是使用aop技术进行的环绕增强,在执行前可以将一些数据绑定到model或者屏蔽某些字段,在业务逻辑执行后可以执行业务是否有异常并且进行拦截2.一般使用场景较多的用处是用来做全局的异常处理,将某些不友好的信息稍微加工变成较为友好的信息输出3.开始使用全局异常拦截器实现使用@ControllerAdvice声明一个建言 使用@Exc...
2018-11-14 09:43:24
2072
原创 Guns——使用swagger生成api文档(三)
1.swagger介绍swagger是用来自动生成相应api文档的一个插件,使用简单。2.引入swagger依赖 <!--swagger--> <dependency> <groupId>io.springfox</groupId> <artifactId>sp...
2018-11-14 09:14:25
2192
原创 操作系统之进程—死锁 (六)
1.死锁产生独占性资源,如磁带机、打印机、绘图仪等硬件设备以及进程表、临界区等软件资源不能同时供多个进程使用,否则容易导致结果混乱、数据错误以及程序崩溃,因此系统一次仅允许一个进程访问独占性资源 如果多个进程共享的资源为独占性资源,处理不当,就可能发生若无外力,进程永远相互等待的情况,这时就说这组进程发生了死锁死锁例子 两个同学同时进入只有一种书桌和一张凳子的房间学习,假设必需拥有...
2018-11-14 08:30:55
2757
原创 Guns——AOP切换多数据源(二)
1.配置单数据源spring boot中首先配置好数据库连接信息spring: profiles: local datasource: url: jdbc:mysql://127.0.0.1:3306/guns?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTim...
2018-11-13 22:03:47
2721
1
原创 Guns——AOP日志框架(一)
1.简单回顾AOP@Before 前置通知(Before advice) :在某连接点(JoinPoint)——核心代码(类或者方法)之前执行的通知,但这个通知不能阻止连接点前的执行。为啥不能阻止线程进入核心代码呢?因为@Before注解的方法入参不能传ProceedingJoinPoint,而只能传入JoinPoint。要知道从aop走到核心代码就是通过调用ProceedingJionPoi...
2018-11-13 20:39:01
1454
原创 操作系统之进程—管程 (五)
1.管程和条件变量、引入管程原因信号量机制的缺点:进程自备同步操作,P(S)和V(S)操作大量分散在各个进程中,不易管理,易发生死锁 管程特点:管程封装了同步操作,对进程隐蔽了同步细节,简化了同步功能的调用界面。用户编写并发程序如同编写串行程序引入管程机制的目的把分散在各进程中的临界区集中起来进行管理 防止进程有意或无意的违反同步操作 便于用高级语言来书写程序,也便于程序正确性...
2018-11-05 21:44:03
388
原创 操作系统之进程—信号量及其操作 (三)
1.同步与同步机制 著名的生产者--消费者问题是计算机操作系统中并发进程内在关系的一种抽象,是典型的进程同步问题。 生产者进程可以是计算进程、发送进程; 消费者进程可以是打印进程、接收进程等等。 解决好生产者--消费者问题就解决好了一类并发进程的同步问题 生产者-消费者案例有一环形缓冲池,包含n个缓冲区(0~n-1)。有两组进程:一组生产者进程和一组消费者进程,生产者进程向空的缓冲...
2018-11-04 21:56:10
2284
原创 操作系统之进程—临界区管理 (二)
1.临界区管理 临界区:并发进程中与共享变量有关的程序段 临界资源:共享变量代表的资源2.临界区解决互斥问题如果能保证进程在临界区执行时,不让另一个进程进入临界区,即各进程对共享变量的访问是互斥的,就不会造成与时间有关的错误3.临界区的调度原则 一次至多允许一个进程进入临界区内 如果已有进程在临界区中,试图进入此临界区的其他进程应等待; 进入临界区的进程应在有限时间...
2018-11-04 17:08:33
5199
1
原创 操作系统之进程—并发进程(一)
1.顺序程序设计传统的程序设计方法是顺序程序设计,即把一个程序设计成一个顺序执行的程序模块,不同程序也是按序执行的。顺序分成内部顺序和外部顺序内部的顺序性 : 程序在处理器上执行时严格有序的,即只有当一个操作结束后,才能开始后继操作,这称为程序内部的顺序性 外部的顺序性 : 如果完成一个任务需要若干个不同的程序,这些不同程序在时间上按调用次序严格有序执行,这称为程序外部的顺序性2.并发...
2018-11-03 21:55:22
16835
转载 四张图带你了解Tomcat系统架构
一、Tomcat顶层架构先上一张Tomcat的顶层结构图(图A),如下:Tomcat中最顶层的容器是Server,代表着整个服务器,从上图中可以看出,一个Server可以包含至少一个Service,用于具体提供服务。Service主要包含两个部分:Connector和Container。从上图中可以看出 Tomcat 的心脏就是这两个组件,他们的作用如下:Connector用于...
2018-10-25 21:27:43
223
转载 spring-security 与 jwt
1.前提已经了解了jwt的内容 已经了解了oauth2的内容 已经了解了spring-security基础知识 有部分http协议的基础知识2.为什么用jwt用jwt主要解决前后端分离导致的2个问题跨域csrf问题前提:前后端不分离时候解决跨域问题可以用token解决或者corf解决,前后端分离后由于访问后台本身就是跨域(ajax)所以解决方案失效解决:jwt本身就是一个...
2018-10-20 14:57:59
6791
1
原创 spring security oauth2 自动刷新续签token (refresh token)
1.引言前提:了解spring security oauth2的大致流程(对过滤器的内容有一定的了解) 主要思路:首先用过期token访问受拦截资源 认证失败返回401的时候调用异常处理器 通过异常处理器结合refresh_token进行token的刷新 刷新成功则通过请求转发(request.getRequestDispatcher)的方式再次访问受拦截资源2.源码分析核心过滤器...
2018-10-20 14:56:38
61499
24
原创 spring security oauth2 授权服务器负载均衡解决方案
1.引言本文所讲的内容是以spring security oauth2 与 spring cloud 为基础的,在微服务的构建中,将授权服务器注册在eureka上面。当客户端访问资源服务器的时候必须携带token进行认证和授权。如果我们在资源服务器上直接硬编码授权服务器地址,那么我们是不能够搭载高负载的授权服务器的,所以我们需要一个可以负载均衡的RestTemplate进行负载调用授权服务器。...
2018-10-19 20:06:44
4565
4
转载 Oauth2协议 通过js和ajax获取token及刷新token
基于Oauth2.0协议授权码模式的认证流程授权码模式工作流程:浏览器访问某个受保护的资源,客户端自动将网页重定向到认证服务器(/oauth/authorize),携带clientid等信息 用户选择是否给予客户端授权(可自动授权) 认证服务器将浏览器重定向到”重定向URI”(redirection URI),同时附上一个授权码 浏览器拿到授权码,附上早先的”重定向URI”,向认证...
2018-10-18 17:12:03
8881
原创 基于Spring的单元测试
1.基于spring的单元测试由于仅仅是单元测试是不够的,我们在做一个系统的时候往往需要不同层不同对象的交互,那么我们也就需要集成测试@RunWith(SpringRunner.class)@ContextConfiguration(classes="TestConfig.class")@ActiveProfile("prod")public class LlgWebSpringb...
2018-10-13 22:02:42
956
原创 Junit 4 学习汇总
1.断言assertJUnit为所有基本类型和对象和数组(基元或对象)提供重载的断言方法。参数顺序是预期值,后跟实际值。第一个参数可以是失败时输出的String消息(可选)。断言略有不同,assertThat它具有可选失败消息,实际值和Matcher对象的参数。请注意,与其他断言方法相比,预期和实际相反。具体api查看github :https://github.com/junit-team/...
2018-10-13 21:00:43
260
原创 设计模式 - 适应设计模式 - Adapter模式(二)
目录 1.什么是Adapter模式2.什么时候用Adapter模式3.Adapter模式中的角色4.总结1.什么是Adapter模式中文名字叫做设配器模式。联系实际的话就像我们转接头一样,比如现在的手机取消了耳机孔,但是我们这些普通老百姓不可能花几百块再买一个充电孔的耳机吧?所以我们理所当然的可以买一个充电口转耳机孔的转接头或者叫做设配器。这样子我们就可以不用花较大的代...
2018-09-23 21:12:51
213
原创 设计模式 - 适应设计模式 - Iterator模式(一)
1.什么是Iterator模式直接翻译的话其实是叫做迭代器模式,在英文单词中有重复做某件事情的意思。迭代器的作用就是把for循序遍历集合的这个过程抽象出来,实现在数据集合中遍历数据的功能2.为什么需要Iterator模式其实我们知道迭代器模式其实就是for循环,那么它跟for循环有什么区别值得我们去使用这个模式呢?我认为最重要的原因就是它可以将遍历和实现完全区分开来。我们知道我们一般使...
2018-09-23 13:09:16
352
转载 如何使用分布式管理工具:Git
目录 1.Git的由来2.什么是Git3.为什么git叫做分布式版本控制系统集中式版本控制系统分布式版本控制系统集中式与分布式的差异性4.开始安装GitGit安装Git bash配置5.开始使用Git(版本库)什么是版本库开始创建版本库开始添加文件到版本库6.Git版本回退git statusgit sdiff开始使用版本回退...
2018-09-17 11:45:01
1762
原创 计算机组成原理 (一) :计算机系统概论
1.计算机的分类电子计算机从总体上分为两大类电子模拟计算机:“模拟”就是相似的意思。模拟计算机的特点是数值由连续量来表示,运算过程也是连续的。电子数字计算机:它是在算盘的基础上发展起来的,是用数目字来表示数量的大小。数字计算机的主要特点是按位运算,并且不连续地跳动计算。电子计算机两大类的主要区别 数字计算机 模拟计算机...
2018-09-11 21:55:39
1336
转载 微服务架构spring cloud - Gateway路由熔断(十四)
本文主要介绍 Spring Cloud Gateway 的路由熔断、路由重试和高可用。路由熔断在前面学习 Hystrix 的时候,我们知道 Hystrix 有服务降级的能力,即如果服务调用出现了异常,则执行指定的 fallback 方法。Spring Cloud Gateway 也融合了 Hystrix,可以为我们提供路由层面服务降级。我们就来看看如何来做。在之前 gateway ...
2018-09-11 10:13:11
9310
转载 微服务架构spring cloud - Gateway限流(十三)
绝境长城(冰与火之歌)在高并发的应用中,限流是一个绕不开的话题。限流可以保障我们的 API 服务对所有用户的可用性,也可以防止网络攻击。一般开发高并发系统常见的限流有:限制总并发数(比如数据库连接池、线程池)、限制瞬时并发数(如 nginx 的 limit_conn 模块,用来限制瞬时并发连接数)、限制时间窗口内的平均速率(如 Guava 的 RateLimiter、nginx 的...
2018-09-11 10:06:28
13753
2
转载 微服务架构spring cloud - Gateway过滤器(十二)
在上一篇文章中,我们了解了 Spring Cloud Gateway 作为网关所具备的基础功能:路由。本篇我们将关注它的另一个功能:过滤器。Spring Cloud Gateway 已经内置了很多实用的过滤器,但并不能完全满足我们的需求。本文我们就来实现自定义过滤器。虽然现在 Spring Cloud Gateway 的文档还不完善,但是我们依旧可以照猫画虎来定制自己的过滤器。Fi...
2018-09-11 10:05:42
8548
1
springboot+spring security +csrf 的拥有后台管理功能的厨具批发商城网站
2018-04-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人