- 博客(57)
- 收藏
- 关注
原创 认识Docker
Docker 客户端与 Docker 守护程序通信,后者负责构建、运行和分发 Docker 容器的繁重工作。Docker 客户端和守护程序可以在同一系统上运行,或者您可以将 Docker 客户端连接到远程 Docker 守护程序。Docker 提供了在松散隔离的环境中打包和运行应用程序的功能,该环境称为容器。容器是轻量级的,包含运行应用程序所需的一切,因此您无需依赖主机上安装的内容。您可以在工作时共享容器,并确保与您共享的每个人都能获得以相同方式工作的相同容器。容器成为分发和测试应用程序的单元。
2024-12-09 16:46:15
646
原创 SpringCloud-负载均衡-ribbon
核心概念:用户来访请求应该相对平均的分摊到每个节点;不要将所有工作量都给一个节点。LB策略的目的(负载均衡):海量的用户请求均匀的分配到集群中的每一台机器上设计系统时需要有一定的余量(应对系统不同情况)自定义基于一致性哈希负载均衡策略;制定服务应用自定义策略:来访的请求怎么找到对应的服务器呢?将来访的请求的某一个特征量(可以是请求中的RequestParam也可以是你整个的URL)找出来,通过一定的算法做成一个摘要。再通过HashCode算法过滤一遍摘要,
2024-10-22 18:39:52
1279
1
原创 SpringCloud-服务治理-Eureka
专治分布式系统(一)高可用性:服务治理框架保证服务的可用性(二)分布式调用:微服务节点通常散落在不同的网络环境中,大型互联网公司甚至会使用两地三机房或跨洲际机房做异地容灾。这要求服务治理框架具备在复杂网络环境下准备获知服务节点网络地址(IP,端口以及服务名称)的能力。作为服务消费者,就可以借助服务治理框架的,向服务节点发起请求。(三)生命周期管理:微服务将自己的一生交给了服务治理框架。从服务上线,储蓄运行,直到生命结束,服务治理贯穿整个微服务生命周期。
2024-10-12 11:18:32
1141
1
原创 快速搞定分布式Kafka
;;;esac使用ZooInspector图形界面连接zookeeper。使用到的命令:java -jar.\zookeeper-dev-ZooInspector.jar。
2024-08-01 18:52:54
480
原创 快速搞定分布式RabbitMQ---RabbitMQ进阶与实战
1.防火墙需要添加5672以及15672端口,防火墙允许其开放第一个命令:firewall-cmd --add-port=5672/tcp --permanent显示执行成功:success但是使用:firewall-cmd --query-port=5672/tcp查询的时候未查询到2.hostname修改涉及集群的测试;Hostname,修改后需要重启才能够生效;
2024-07-26 17:14:17
1134
原创 快速搞定分布式RabbitMQ-分布式消息队列基础
Kafka介绍:日志收集和传输;适合产生大量数据的互联网服务的数据收集业务如果你想做消息一条不丢,kafka能够实现,效率会相对低下。分布式;跨平台;实时性;伸缩性强Kafka做日志收集,瓶颈点在ES,ES集群的磁盘满了,导致ES消息限流;消息都堆积在kafka,数据堆积量可能达到了几十亿;并不影响kafka消息接收能力。顺序写,PageCache空中接力,高效读写;(顺序写排,可以提高磁盘的利用率)高性能,高吞吐;后台异步,主动Flush;预读策略,IO调度。
2024-07-25 20:57:11
962
原创 分布式搜索引擎ES--Elasticsearch集群
在最新版7.x中,minimum_master_node这个参数已经被移除了,这一块内容完全由es自身去管理,这样就避免了脑裂的问题,选举也会非常快。N为集群的中master节点的数量,也就是那些 node.master=true 设置的那些服务器节点总数。同一个分片的主与副本是不会放在同一个服务器里的,因为一旦宕机,这个分片就没了;每个主分片都包含索引的数据,由于目前是单机,所以副分片是没有的,集群健康值显示为黄色。克隆以后,先将es中的打他目录,一定要清空,这里面包含了原先的索引库数据。
2024-07-25 15:49:36
1414
原创 分布式搜索引擎ES-Elasticsearch深度分页与批量操作
每次搜索都是基于一个历史的数据快照,查询数据的期间,如果有数据变更,那么和搜索是没有关系的,搜索的内容还是快照中的数据。我们在获取第9999条到10009条数据的时候,其实每个分片都会拿到10009条数据,然后集合在一起,总共是10009*3=30027条数据,针对30027数据再次做排序处理,最终会获取最后10条数据。深度分页其实就是搜索的深浅度,比如第1页,第2页,第10页,第20页,是比较浅的;发生异常报错不会影响其他操作。需要查询初始化,通过scroll_id实现查询,当hits为空,查询完毕。
2024-07-24 17:37:42
594
原创 分布式搜索引擎ES-DSL搜索详解
建立索引: xxx(自定义名称)自定义mapping:请求参数的查询(QueryString)查询[字段]包含[内容]的文档测试搜索:q=desc:新华网拼接查询:称为queryString方式查询q=nickname:新&q=age:25text与keyword搜索对比测试(keyword不会被倒排索引,不会被分词)这种方式称之为QueryString查询方式,参数都是放在url中作为请求参数的。
2024-07-23 22:02:14
1598
原创 Redis实现用户会话
Springsession框架就是解决方案,提供一组API和实现,用于管理用户的session信息,它把servlet容器实现的httpsession替换成Springsession,专注于解决session管理问题,Session信息存储在Redis中,可简单快速无缝的集成到我们的应用中。SpringSession的特性:提供用户session管理的API和实现;提供HttpSession,以中立的方式取代web容器的session,比如tomcat中的session;
2024-07-20 13:02:20
1586
原创 分布式搜索引擎ES-Elasticsearch进阶
设置相应的数据结构:(mapping,就是定义数据的类型)Index:false:表示不被识别,如果存放私密信息的时候设置为FALSEtext与keyword异同:同:都是String异:text大的文本,需要分词;keyword:精确匹配的搜索,微信号,手机号,QQ号等无需分词创建索引的同时创建mapping},为已经存在的索引创建mappings或者创建mappings"id": {},"age": {},},},},"sex": {},"score": {},
2024-07-18 19:55:19
1073
原创 分布式搜索引擎ES-elasticsearch入门
正排索引:相当于文档中的一条条记录;例子:汉语值得学习;汉语是语言;汉语学习视频;倒排索引:起源于实际应用中需要根据属性的值来查询记录。这种索引表的每一项都包括一个属性值和包含该属性值得各个记录地址。由于不是根据记录来确定属性,而是根据属性来确定记录的位置。可以记录文档的ids,词频跟位置例子:汉语值得学习;汉语是语言;汉语学习视频;单词文档ids词频TF;位置POS汉1,2,3语1,2,3值得11:1:<3>学习1,3是21:1;<3>言2。
2024-07-18 18:59:52
1626
原创 LVS+Nginx高可用集群---搭建高可用集群负载均衡
Lvs(Linux Virtual Server):使用集群,对于整个用户来说是透明,用户访问的时候是单个高性能的整体。道理与nginx类似LVS网络拓扑图:是基于四层。用户通过浏览器发送请求,然后到达LVS.Lvs根据相应算法将请求发送到相应的真实的服务器上(RS).
2024-07-16 22:20:34
2052
4
原创 LVS+Nginx高可用集群---keepalived原理与实战
高可用的故障转移跟故障切换都是通过VIp协议完成的,(主节点)不停的往备用机发送心跳,备用机拿到之后就知道主节点还活着。将/home/software/keepalived-2.2.7/keepalived/etc目录下的 init.d/keepalived 移动到/etc/keepalived.首先安装backup节点的keepalived,修改对应keepalived里的配置(参考之前配置的内容),并且配置为系统服务。存在多个虚拟ip(有权重),在主节点宕机,多个BACKUP会有个竞争的过程。
2024-07-15 22:43:28
1594
原创 LVS+Nginx高可用集群---Nginx进阶与实战(二)
3.修改静态项目中app.js关于url的配置:由于暂时没有配置域名,所以只修改端口的内容,然后将shop跟center的内容暂时修改成对应的ip+端口。2.将tomcat-frontend的webapps下的静态foodie-shop和foodie-center移动到/home/website。检查nginx是否含有ssl的模块-安装ssl模块-配置HTTPS模块-配置SSL-主域名可以通过HTTPS访问。大概步骤:云服务器-注册域名-配置SSL证书-下载证书,并且拷贝到nginx的conf目录下。
2024-07-09 11:56:19
532
原创 LVS+Nginx高可用集群---Nginx进阶与实战
两个站点的域名不一样,就会有一个跨域问题。跨域问题:了解同源策略:协议,域名,端口号都相同,只要有一个不相同那么就是非同源。CORS全称Cross-Origin Resource Sharing,意为跨域资源共享。当一个资源去访问另一个不同域名或者同域名不同端口的资源时,就会发出跨域请求。如果此时另一个资源不允许其进行跨域资源访问,那么访问就会遇到跨域问题。跨域指的是浏览器不能执行其它网站的脚本。是由浏览器的同源策略造成的,是浏览器对JavaScript 施加的安全限制。前端有跨域吗?有。
2024-07-08 17:45:34
1195
原创 LVS+Nginx高可用集群--基础篇(二)
Tomcat是在内网的,域名跟云服务器的公网ip进行了绑定,tomcat的ip相当于对外关闭的。通过域名解析了之后,不管我们ip怎么去变,用户访问的域名永远是固定的。我们修改host文件目的就是劫持,在请求dns服务解析ip之前,提前把url和对应服务器ip地址的映射关系配置好。主流:location对应的是/后面的内容。解析域名成对应的ip 通过ip器发送相应的请求的。#定义压缩的级别(压缩比,文件越大,压缩越多,但是cpu使用会越多)这个就是模拟本地域名的,也就是修改host,生产环境就是域名。
2024-07-08 13:39:10
538
原创 Springcloud-消息总线-Bus代码部分
因为要测试批量的消息变更,所以config-bus-client需要启动多实例。创建config-bus-server和config-bus-consumer。说明:刷新请求不管是发送到配置中还是配置中心下面的节点,都会完美触发刷新动作。同时,61001与61002的配置信息都发生了变更。启动RabbitMQ,修改demo的配置属性。(2)application.yml文件配置。(2).bootstrap.yml配置文件。使用Actuator服务推送BUS变更。没有变更配置信息之前。修改配置中心配置文件。
2024-06-29 18:15:45
336
原创 面试-java异常体系
具体明确:异常的抛出应能通过异常类和message准确说明异常的具体类型和产生异常的原因。延迟捕获:异常的捕获和处理都应尽可能的延迟,让掌握更多信息的作用域来处理异常。Finally的执行顺序先于catch语句里的return语句。提早抛出:尽可能早的发现并抛出异常,便于准备定位的问题。在用户看来,应用系统发生的所有异常都是应用系统内部的异常。捕获异常:寻找合适的异常处理器处理异常,否则终止运行。抛出异常:创建异常对象,交由运行时系统处理。一旦遇到异常抛出,后面的异常就不会进行。2.java异常要点分析。
2024-06-27 17:37:20
304
原创 面试-Java线程池
Fork/join分别将这些子任务分别放到不同的队列里,并为每个队列创建一个单独的线程来执行队列里的任务。会出现有的队列里的任务以及完成,其他队列里的任务还没有完成,会导致已经完成任务的线程会被闲置。为了减少窃取任务线程以及被窃取任务线程之间的竞争,一般会使用双端队列,被窃取任务的线程永远从双端队列的头部来任务执行,窃取任务线程永远从双端队列的尾部来任务执行。如果并发的请求的数量非常多,但每个线程执行的时间非常短,这样就会频繁的创建和销毁线程。是根据一组执行策略调用,调度,执行和控制的异步任务的框架。
2024-06-26 17:42:57
652
原创 面试题-CAS(compare and swap)
执行value++,虽然volatile可以保证对value变量操作可保证线程之间的可见性,并不能保证指令的原子执行。在多线程并发下,无法保证线程安全;使用atomicInterger–使用unsafe提供的底层能力进行底层操作,以volatile的字段记录数值。应用场景:当一个线程需要修改共享变量的值,完成这个操作。执行完毕了需要更新共享变量的值时,我们就可以调用CAS方法去更新变量的值。执行CAS操作时,比较内存位置的值(主内存的值)与预期原值是否相同,相匹配时,处理器会将该位置的值自动更新为新值。
2024-06-26 17:29:07
271
原创 面试-synchronized(java5以前唯一)和ReentrantLock的区别
Java并发用来构建锁或其他同步主键的基础框架,是j.u.c package的核心。实际应用场景:ArrayBlockingQueue是数组实现的,线程安全的,有界的阻塞队列。(5).性能未必比synchronized高,并且也是可重入的。ArrayBlockingQueue通过await()和signal()的组合优雅的完成条件判断和通知等待。数组实现的线程安全的,有界的阻塞队列。(4).调用lock()之后,必须调用unlock()释放锁。0,1相继获取(每个线程获取到锁的概率是一样的)
2024-06-25 16:40:31
359
原创 面试-java并发与多线程的部分函数
Lock.notifyall().线程进入锁池中,竞争该对象的锁。若有许多线程,优先级高的竞争到锁的概率更大。竞争到锁的会执行,直到完成,或遇到异常才会释放锁。Wait不传参,最终也是调用wait(native)的传参方法。Lock.wait()此时线程进入等待池,不会竞争lock锁。这两个池与object的wait,notify和notifyall相关。Object.wait不仅会让出CPU,还会释放已经占有的同步资源锁。所有线程都会被唤醒,但是同样没竞争到的在代码中依旧会进行等待。
2024-06-24 15:50:26
438
原创 面试-java多线程与并发
当线程的run方法完成时,或者主线程的main方法完成时,我们认为线程是终止了。线程对象也许是活的,但是它已经不是一个单独执行的线程。线程池:好处:提交多个实现Callable的方法类,去让线程池并发的处理结果。代码思想:往线程池里提交任务,通过idDone判断是否完成,通过future.get去等待直到获取到我们获取到value的值。Ready状态的线程位于线程池中,等待被线程调度选中,获取cpu的使用权。Runing状态的线程位于可运行线程之中,等待被线程调度选中获取CPU使用权。精准控制,实现简单。
2024-06-23 17:28:03
391
原创 面试-java多线程与并发
进程是资源分配的最小单位,线程是CPU调度的最小单位。进程让操作系统的并发性成为可能,线程让进程的内部并发成为可能。Thread.start()创建子线程,再在子线程中调用Thread中实现好的run方法去执行相应的业务逻辑。源码中start使用start0()方法调用JVM_StartThread()方法。这里其实就是Thread.start()方法会创建出子线程!进程是抢占处理机的调度单位,线程属于某个进程,共享其资源。Runnable是个接口(只有个抽象的run方法)。start方法会创建新的线程。
2024-06-23 17:21:36
524
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人