首页
在线工具
搜索
1
使用Metrics指标度量工具监控Java应用程序性能(Gauges, Counters, Histograms, Meters和 Timers实例)
2
如何将Virtualbox和VMware虚拟机相互转换
3
Jumpserver的MFA配置
4
Markdown正确使用姿势
5
Kuboard与KubeSphere的区别:Kubernetes管理平台对比
杂谈与随笔
工具与效率
源码阅读
技术管理
运维
数据库
前端开发
后端开发
Search
标签搜索
Angular
Docker
Phabricator
SpringBoot
Java
Chrome
SpringSecurity
SpringCloud
DDD
Git
Mac
K8S
Kubernetes
ESLint
SSH
高并发
Eclipse
Javascript
Vim
Centos
Jonathan
累计撰写
86
篇文章
累计收到
0
条评论
首页
栏目
杂谈与随笔
工具与效率
源码阅读
技术管理
运维
数据库
前端开发
后端开发
页面
搜索到
86
篇与
的结果
2020-04-01
K8S搭建准备工作全解析
K8S搭建准备工作全解析 在容器编排领域,Kubernetes(简称K8S)已然成为了事实上的标准。它能够高效地管理容器化应用程序,实现自动化部署、扩展和管理。然而,在搭建K8S集群之前,有一系列重要的准备工作需要完成。本文将结合思维导图,深入介绍K8S搭建的前期准备要点。 一、机器准备 搭建K8S集群,首先需要准备合适的机器资源,这里计划准备5台机器,每台机器都承担着特定的角色: 第一台:软件服务器 glt:可能是用于特定的版本管理或者代码托管等相关功能,是软件开发和部署流程中的重要一环。 ssr证书签发:负责生成和管理SSL/TLS证书,这些证书对于保障网络通信的安全性至关重要,能够防止数据在传输过程中被窃取或篡改。 docker-nginx网关:作为网关,它可以对进入集群的流量进行管理和转发,同时借助Docker进行部署,方便快捷且易于维护。 harbor docker仓库:用于存储和管理Docker镜像,是容器镜像的集中存储地,方便在集群中进行镜像的分发和部署。 第二台:DNS服务/代理分发 这台机器主要负责域名系统(DNS)相关的服务以及代理分发功能。DNS服务可以将域名解析为IP地址,使得用户能够通过易于记忆的域名访问集群中的服务。代理分发功能则可以根据一定的策略,将请求合理地分配到不同的后端服务器上,实现负载均衡。 第三台:代理分发 进一步强化负载均衡和请求分发的能力,通过合理的配置和算法,将网络请求均匀地分配到集群中的各个节点,避免单个节点负载过高,提高整个集群的性能和可用性。 第四台和第五台:service/pod节点 这两台机器作为service/pod节点,是运行K8S中服务(Service)和容器组(Pod)的关键所在。它们承载着具体的应用程序容器,通过K8S的调度和管理,实现容器的高效运行和资源分配。 二、第三方软件准备 除了机器资源,还需要安装和配置一系列第三方软件,这些软件在K8S集群中各自发挥着不可或缺的作用: etcd 高可用的服务发现与存储:etcd是一个分布式键值存储系统,它为K8S集群提供高可用的服务发现和配置存储功能。集群中的各种配置信息、服务注册信息等都可以存储在etcd中,方便各个组件进行读取和更新。 基于Raft算法:采用Raft算法保证数据的一致性和高可用性,通过选举领导者等机制,确保在多个etcd节点之间数据能够正确同步和处理。 proxy,apiserver的注册发现:帮助K8S中的代理(proxy)和API服务器(apiserver)进行注册和发现,使得各个组件之间能够准确地相互通信和协作。 supervisor 作为守护进程工具,supervisor的作用是对集群中的所有程序进行统一管理。它可以监控程序的运行状态,在程序意外终止时自动重启,确保集群中的各项服务能够持续稳定地运行。 flanneld flanneld负责创建和管理虚拟网络,它解决了容器之间的通信问题。通过为容器提供一个虚拟的网络环境,使得不同节点上的容器能够像在同一网络中一样进行通信,方便了容器化应用的部署和运行。 coredns DNS服务器/转发器:coredns作为K8S集群内部的DNS服务器,承担着域名解析和转发的任务。它能够将服务名称解析为对应的IP地址,实现K8S中的服务发现功能。 解决K8S的服务发现:在K8S中,服务的IP地址可能是动态变化的,coredns通过动态解析和更新,能够及时准确地将服务名称映射到正确的IP地址,确保服务之间的通信顺畅。 解决pod的问题:对于Pod,coredns同样重要。它可以处理Pod的IP地址动态变化情况,以及service资源的创建和销毁等情况,类似于域名和IP的关系,实现service的自动发现,保障Pod能够正确访问到对应的服务。 三、总结 K8S搭建准备工作涉及机器资源的合理规划和第三方软件的精心选择与配置。每一个环节都至关重要,它们相互配合,共同为构建一个稳定、高效、可用的K8S集群奠定基础。在实际搭建过程中,需要严格按照要求进行操作,并根据具体的业务需求和环境特点进行适当的调整和优化,只有这样才能充分发挥K8S在容器编排和应用管理方面的强大优势。
2020年04月01日
2020-02-22
AlloyDesigner:前端开发者的利器
AlloyDesigner:前端开发者的利器 在前端开发和调试过程中,我们经常需要调整页面布局、对比设计稿、检查响应式效果等。而 Chrome 插件 AlloyDesigner 就是一款专门为前端开发者打造的工具,能够帮助我们更高效地进行页面设计对比和调整。 AlloyDesigner 是什么? AlloyDesigner 是一款轻量级的 Chrome 浏览器扩展,主要用于网页设计稿和实际页面的比对。它提供了 标尺、参考线、对比叠加、元素对齐 等功能,让开发者可以更加直观地调整网页,确保像素级的精准布局。 主要功能特点 1. 设计稿与页面的精准对比 可以直接在网页上上传设计稿(支持 PNG、JPG),并调整透明度,与实际页面进行对比。 提供 蒙版、对比滑块 等方式,帮助开发者快速发现页面与设计稿的差异。 2. 标尺与参考线 AlloyDesigner 提供了 垂直和水平标尺,可以精确测量网页元素的位置。 参考线功能可用于对齐关键 UI 元素,确保页面布局的精确度。 3. 便捷的标注和测量 允许用户手动标注重要元素的位置、大小等。 提供 自动测量 功能,帮助开发者快速获取元素的尺寸、间距。 4. 响应式开发支持 可以调整浏览器窗口大小,查看不同分辨率下的页面效果。 帮助开发者更方便地适配各种设备屏幕。 为什么推荐 AlloyDesigner? 轻量便捷:不需要复杂的配置,安装即用。 像素级精准比对:确保设计稿与开发结果的完美匹配。 提高效率:减少手动测量和调整的时间,提高前端开发效率。 免费开源:作为一款免费的 Chrome 插件,AlloyDesigner 适用于所有前端开发者。 如何安装和使用? 安装步骤 打开 Chrome 浏览器,进入 Chrome Web Store。 搜索 AlloyDesigner,点击 添加到 Chrome 进行安装。 安装完成后,在扩展程序中找到 AlloyDesigner,固定到工具栏。 使用方法 打开你要调试的网页。 点击浏览器工具栏中的 AlloyDesigner 图标。 上传设计稿,调整透明度,对比实际页面。 使用标尺、参考线等工具,精细调整网页布局。 总结 对于前端开发者来说,AlloyDesigner 是一个不可多得的实用工具,能够帮助我们快速对比设计稿与页面效果,提高开发效率。如果你还在手动测量元素对比,不妨试试 AlloyDesigner,它一定能给你带来更高效的开发体验! 你是否使用过 AlloyDesigner?欢迎在评论区分享你的使用心得!
2020年02月22日
2020-02-02
ShardingSphere使用中的重点问题剖析
ShardingSphere使用中的重点问题剖析 一、引言 ShardingSphere是一款强大的分布式数据库中间件,在助力应用实现数据分片、读写分离等功能方面表现卓越。然而,在实际应用过程中,会遇到一些关键问题。本文将结合思维导图,深入探讨ShardingSphere在读写分离和事务处理方面的重点问题及应对策略。 二、读写分离相关问题 (一)数据库主从同步延迟问题 在读写分离架构下,主库负责写入操作,从库承担读取操作。但由于主从库之间的同步存在延迟,可能导致从库读取到的数据并非最新。 解决方案一:提供同一个线程的Ddl执行统一库。即对于在同一个线程内的一系列数据定义语言(DDL)操作,确保都在主库上执行,这样可以避免主从同步延迟带来的数据不一致问题,因为在同一线程内操作主库,能保证数据的实时性和一致性。 解决方案二:提供Hint强制读写库。通过特定的Hint机制,开发者可以在代码中明确指定某些查询操作必须在主库上执行,绕过从库,从而获取最新的数据,适用于对数据实时性要求极高的场景,如金融交易中的账户余额查询等。 (二)强制读主问题 当应用需要获取最新数据时,可能会面临强制读主的需求。但在现有的读写分离架构下,常规的基于对象关系映射(ORM)的基础增删改查(CRUD)操作可能无法直接满足这一要求。 解决方法:需要重构ORM封装的基础CRUD。通过对ORM框架进行定制化开发或扩展,使其能够支持根据业务需求灵活选择从主库还是从库进行读取操作。例如,在特定的业务方法中,通过修改ORM的查询逻辑,添加强制读主的标识,让查询直接路由到主库,保证数据的及时性。 (三)Sql兼容问题 在使用ShardingSphere进行读写分离时,部分SQL语句可能会出现兼容性问题。 部分Sql语句不支持,需要换语句:例如“Select Distinct Test_Int From T_Order;”这样的语句可能无法直接在ShardingSphere环境下正常执行。此时,开发者需要根据ShardingSphere的语法和规则,对SQL语句进行改写,以满足数据库的操作要求。 Union(合并)相关语句示例:像“Select User_Id, Order_Id, Status From T_Order Union All Select Item_Id, Order_Id, User_Id From T_Order_Item”这样的Union操作语句,在使用时也需要注意其在ShardingSphere中的兼容性。可能需要对表结构、字段类型等进行进一步的检查和调整,确保Union操作能够正确执行,实现数据的合并查询需求。 三、事务问题 (一)Sharding-Jdbc不支持强事务 Sharding-Jdbc作为ShardingSphere的一种使用模式,在事务处理方面存在一定局限性,它不支持传统的强事务(如严格的ACID事务)。 解决策略一:尽量在业务处理事务。在应用层的业务逻辑中,通过合理的流程设计和代码编写,将相关的操作进行分组和协调,以满足业务对数据一致性的要求。例如,在电商系统的下单流程中,通过在业务代码中依次处理库存扣减、订单生成等操作,并进行异常捕获和回滚处理,来模拟事务的一致性效果。 解决策略二:使用Sharding-Proxy,支持多种分布式事务。Sharding-Proxy提供了对分布式事务更好的支持,它可以采用两阶段提交(2PC)、TCC(Try - Confirm - Cancel)等多种分布式事务解决方案。对于一些对事务一致性要求较高的场景,如银行转账业务,可以使用Sharding-Proxy结合合适的分布式事务方案,确保跨库操作的数据一致性。 四、总结 ShardingSphere在实现读写分离和处理事务时,虽然存在一些棘手的问题,但通过合理的技术选型和针对性的解决方案,能够有效应对。在实际项目中,开发者需要深入理解这些问题的本质和解决方案的原理,根据业务场景的特点,灵活运用相关策略,以充分发挥ShardingSphere的优势,构建高效、稳定、可靠的分布式数据库应用系统。
2020年02月02日
2019-11-12
聊聊Hystrix
聊聊Hystrix 一、引言 在分布式系统中,服务之间的调用错综复杂,一个服务的故障可能会引发连锁反应,导致整个系统的雪崩效应。Hystrix作为一款强大的容错库,通过一系列机制保障系统的稳定性和可用性。本文将深入探讨Hystrix的核心原理。 二、Hystrix线程隔离原理 (一)初始化 Set参数对象:Hystrix在初始化时,需要设置一系列参数对象,包括分组(用于将相关的命令归为一组,方便资源管理和统计)、名称(标识具体的命令)、队列(用于存放待执行的任务) 、线程数(指定线程池中的线程数量,决定了能同时处理的请求量)以及线程池Key(用于唯一标识线程池)。 创建线程池(Threadpoolexcutor):根据设置的参数创建线程池,线程池是Hystrix实现线程隔离的关键组件。通过线程池,不同的服务调用可以在各自独立的线程中执行,避免了一个服务调用的阻塞影响其他调用。 存入Concurrenthashmap:将创建好的线程池存入Concurrenthashmap中,便于后续快速获取和管理。 (二)执行Command的方式 Execute():以同步的堵塞方式执行Run() 方法。这意味着调用线程会一直等待命令执行完成并返回结果,如果命令执行时间较长,调用线程会被阻塞,适用于需要立即获取结果且对响应时间要求不特别高的场景。 Queue():采用异步阻塞方式执行Run() 。它会立即返回一个Future对象,调用线程可以通过这个Future对象在后续合适的时机获取执行结果,在获取结果之前,调用线程不会被一直阻塞,适用于一些后台任务处理场景。 Observe():在事件注册前执行Run()/Construct() 。它返回一个Observable对象,通过订阅这个对象可以获取命令执行结果,并且可以在命令执行前进行一些事件注册和预处理操作。 Toobservable():在事件注册后执行Run()/Construct() 。同样返回Observable对象,不过是在事件注册之后才开始执行命令逻辑,提供了更灵活的事件处理和结果订阅机制。 (三)底层使用Rxjava Hystrix的底层实现依赖于Rxjava,Rxjava是一个基于事件流、实现异步操作的库。它提供了丰富的操作符来处理异步任务、事件流的组合和转换等。在Hystrix中,利用Rxjava的特性可以更方便地实现异步执行、事件监听以及对命令执行结果的处理等功能,使得Hystrix的异步操作更加简洁和高效。 三、Hystrix的其他关键机制 (一)熔断器(Circuit Breaker) 熔断器就像一个开关,当服务调用的失败率达到一定阈值(比如在一定时间内失败率超过50% ),熔断器会被打开,后续对该服务的调用将不再实际执行,而是直接返回一个预设的 fallback 结果(比如默认值或者缓存数据)。这样可以快速失败,避免大量无效的调用,防止故障扩散。当熔断器打开一段时间后(称为休眠窗口),会尝试半开状态,允许少量请求通过,来检测服务是否已经恢复正常,如果恢复则关闭熔断器,否则继续保持打开状态。 (二)降级(Fallback) 降级是Hystrix的重要保护机制。当服务调用失败(如超时、异常等情况)或者熔断器打开时,会触发降级逻辑。开发人员可以自定义fallback方法,返回默认值、缓存数据或者一些简单的错误提示信息等,从而保证即使在服务不可用的情况下,系统仍能给用户提供一定的响应,而不是直接报错,提升了用户体验和系统的稳定性。 (三)请求缓存(Request Caching) Hystrix支持请求缓存功能,在一次请求过程中,如果相同的命令被多次调用,Hystrix可以从缓存中直接获取结果,而不需要重新执行命令。这在一些频繁调用相同服务且结果相对稳定的场景下,可以大大减少不必要的服务调用,提高系统的响应速度和性能。 四、总结 Hystrix通过线程隔离、熔断器、降级、请求缓存等一系列精心设计的原理和机制,为分布式系统构建了强大的容错体系。理解这些原理,有助于我们在实际开发中合理配置和使用Hystrix,提升系统的健壮性和可靠性,更好地应对复杂多变的分布式环境中的各种故障和挑战。 五 实操 1. 引入依赖 在pom.xml文件中添加相关依赖: <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring - cloud - starter - hystrix</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring - boot - starter - web</artifactId> </dependency> 2. 启用Hystrix 在Spring Boot应用的主类上添加@EnableHystrix注解来启用Hystrix: import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.hystrix.EnableHystrix; @SpringBootApplication @EnableHystrix public class HystrixApplication { public static void main(String[] args) { SpringApplication.run(HystrixApplication.class, args); } } 3. 线程隔离与命令执行示例 创建一个服务类,定义一个使用HystrixCommand的方法: import com.netflix.hystrix.HystrixCommand; import com.netflix.hystrix.HystrixCommandGroupKey; import com.netflix.hystrix.HystrixCommandProperties; public class HelloWorldHystrixCommand extends HystrixCommand<String> { private final String name; public HelloWorldHystrixCommand(String name) { super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("ExampleGroup")) .andCommandPropertiesDefaults( HystrixCommandProperties.Setter() .withExecutionTimeoutInMilliseconds(5000) // 设置执行超时时间 )); this.name = name; } @Override protected String run() { // 模拟实际的服务调用,这里简单返回问候语 return "Hello, " + name + "!"; } @Override protected String getFallback() { // 降级逻辑,当run方法执行失败时调用 return "Sorry, something went wrong while greeting you, " + name + "!"; } } 使用这个命令类: public class Main { public static void main(String[] args) { HelloWorldHystrixCommand command = new HelloWorldHystrixCommand("John"); // 同步执行方式 String result = command.execute(); System.out.println(result); // 异步执行方式 command.queue(); } } 4. 基于Spring Boot和注解的Hystrix使用 创建一个服务接口和实现类: import org.springframework.stereotype.Service; @Service public class HelloService { @com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand(fallbackMethod = "fallbackHello") public String sayHello(String name) { // 模拟可能失败的服务调用,比如网络延迟或异常 if (Math.random() < 0.2) { // 20%的概率模拟失败 throw new RuntimeException("Service error"); } return "Hello, " + name + "!"; } public String fallbackHello(String name) { return "Sorry, can't say hello right now, " + name + "!"; } } 创建一个控制器类来调用服务: import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { @Autowired private HelloService helloService; @GetMapping("/hello") public String hello(@RequestParam String name) { return helloService.sayHello(name); } } 以上代码分别展示了Hystrix基本命令的使用方式,包括线程隔离下的命令执行以及基于Spring Boot和注解的服务熔断降级功能。实际应用中,可根据业务需求进一步调整配置和逻辑 。
2019年11月12日
2019-08-28
帮朋友撸的一个居于nmap和cve扫描服务漏洞的程序
帮朋友撸的一个居于nmap和cve扫描服务漏洞的程序 现在开源 源码地址:https://github.com/javajeans/nmapreport A Web Dashbord for Nmap And Cve XML Report 使用说明 目录结构 |——————docker docker配置相关 | |———settings.py diango、python的基础系统环境配置 | |———urls.py URL分发器(路由配置文件) |——————nmap | |———nse 暂时不需要 | |———cron.py 任务调度规则 |——————static 本地文件,其中包括css文件夹存放css文件 | |———async.js js脚本 |——————templates html模板文件 |——————nmapreport | |———main.html 页面主体 | |———nmap_auth.html 授权模板(暂时不用) | |———nmap_hostdetails.html network模板 | |———nmap_ndiff.html nmap cve比对(是否重新扫描) | |———nmap_network.html 网络视图模块 | |———nmap_portdetails.html 报告详情 | |———nmap_xmlfiles.html 主页显示内容 | |———report.html 报告 |——————api.py #请求接口方法实现 |——————apps.py 启动入口 |——————functions.py 常规函数 |——————functions_nmap.py nmap相关函数 |——————ndiff.py nmap,cve比对 |——————network.py 网络视图相关逻辑 |——————pdf.py pdf生成逻辑 |——————token.py token生成逻辑 |——————urls.py 路由 |——————views.py 视图跳转逻辑 需要的环境 docker(https://docs.docker.com/) Virtualbox[https://www.virtualbox.org/wiki/Downloads] (演示使用) 技术说明 演示环境说明 如何本地搭建环境测试 搭建两台虚拟机 一台作为扫描、一台被扫描(或者多台,可安装windows、mac等)建议使用virtualbox 系统使用 1.点击"进入系统" 2.创建Nmap扫描 3.扫码列表 4.扫码详情 5.cve检查漏洞 如何使用 docker run -d -v /opt/nmapreport/docker/xml:/opt/xml -p 8081:8000 1249913118/nmapreport 代码位置:/opt/nmapdashboard/nmapreport,可以将此文件映射出来,直接修改 注意:代码修改可执行docker build -t nmapreport:latest .如果不想使用docker可以直接部署在linux环境内(mac、centos、ubuntu) 部署可参考docker的dockerfile文件步骤
2019年08月28日
1
...
4
5
6
...
18