0 前言 一般初学者学习编码和[错误处理]时,先知道[编程语言]有一种处理错误的形式或约定(如Java就抛异常),然后就开始用这些工具。但却忽视这问题本质:处理错误是为了写正确程序。可是 1 啥叫“正确”? 由解决的问题决定的。问题不同,解决方案不同。 如一个web接口接受用户请求,参数age,也许业务要求字段是0~150之间整数。如输入字符串或负数就肯定不接受。一般在后端某地做输入合法性检查,不
1 前言 高性能的HTTP和反向代理服务器,Nginx用来: 搭建Web Server 作负载均衡 供配置的日志字段丰富,从各类HTTP头部到内部性能数据都有 Nginx的访问日志中,存在499状态码的日志。但常见4xx状态码只有400、401、403、404等,499并未在HTTP RFC文档。这499错误日志,在流量较大场景下,特别是面向Internet的Web站点场景下还是很常见 。 2
1 前言MTU、 传输速度、 拥塞控制,还是各种重传,TCP传输相关的核心概念:学习了RFC规范和具体的Linux实现通过案例,把这些知识灵活运用了起来这种种还是在协议规范这大框架内的讨论,默认前提就是通信两端是遵照TCP规定工作,都是君子协定。若不遵TCP规范,甚至找漏洞攻击,这种小人行为也很常见,如 DDoS攻击。2 NTP反射攻击案例游戏业务遭DDoS多见。有次,一个游戏客户发现,他们游戏服
1 Nacos ⼀致性协议 1.1 为什么 Nacos 需要⼀致性协议 Nacos尽可能减少用户部署以及运维成本,做到用户只需要⼀个程序包,就快速单机模式启动 Nacos 或集群模式启动 Nacos。而 Nacos 是⼀个需要存储数据的组件,为实现目标,就要在 Nacos 内部实现数据存储。单机问题不大,内嵌关系型数据库即可;但集群模式就要考虑保障各节点间的数据⼀致性及数据同步,就得引入共识算法,
0 前言注册中心不应仅提供服务注册和发现功能,还应保证对服务可用性监测,对不健康的服务和过期的进行标识或剔除,维护实例的生命周期,以保证客户端尽可能的查询到可用的服务列表。因此本文介绍Nacos注册中心的健康检查机制。1 注册中心的健康检查机制知道⼀个服务是否还健康的方式:客户端主动上报,告诉服务端自己健康状态,如果在⼀段时间没有上报,那么我们就认为服务已经不健康服务端主动向客户端进行探测,检查客
Vue 3 的Composition API + <script setup>这种最新的代码组织方式。<script setup>是啥?为啥尤大在微博强推?本文就使用Composition API 和 <script setup> 重构第2讲的清单应用。重构过程将明白, Composition API 让我们更好组织代码结构, <script setup&
Vue 3 如此优秀,是不是应该赶紧把项目都升级到Vue 3?但不是所有项目都适合升级。1 应该从2升到3吗?如开启一个新项目,直接使用Vue 3最佳选择。以前独立使用Vue 2 开发应用,不管咋组织代码,无法避免在data、template、methods中上下反复横跳,这种弊端在项目规模上来后更明显。由于vue-cli基于Webpack开发,当项目规模上来后,每执行一下,调试环境就要1min,
1 下班前的寂静 刚准备下班呢,测试大姐又给我提个bug,你看我这就操作了一次,network里咋有两个请求? 我心一惊,”不可能啊!我代码明明就调用一次后端接口,咋可能两个请求!“。打开她的截图一看:多个options请求。 我不慌不忙解释道:”这不用管,是浏览器默认发送的一个预检请求“。 可测试大姐好像依旧很执着:“那这可肯定不行啊,明明一次请求,干嘛要两次呢,这不是增大服务端压力吗?” “m
当应用开始脱离单机运行和访问时,服务发现就诞生了。目前的网络架构是每个主机都有⼀个独立的 IP 地址,服务发现基本都是通过某种方式获取到服务所部署的 IP 地址。 DNS 协议是最早将⼀个网络名称翻译为网络 IP 的协议,在最初的架构选型中,DNS+LVS+Nginx 基本满足所有 RESTful 服务的发现,此时服务的 IP 列表通常配置在 nginx 或 LVS。后来出现 RPC 服务,服务的
前言 一款app,消息页面有:钱包通知、最近访客等各种通知类别,每个类别可能有新的通知消息,实现已读、未读功能,包括多少个未读,这个是怎么实现的呢?比如用户A访问了用户B的主页,难道用rabitmq给B发通知消息吗?量大了成本受得了吗?有没有成本低的方案呢 小谈 挺好的一个问题,可惜其他的回答要么是大而化之想当然,要么是顾左而言他,没有一个正经的回答。 这个是很常见的需求,在做这类需求的时候,首
1 拉取镜像 指定版本,在git查看相应版本,参考: https://github.com/openzipkin/zipkin 如2.21.7 docker pull openzipkin/zipkin:2.21.7 2 启动 Zipkin默认端口为9411。启动时通过-e server.port=xxxx设置指定端口 docker run --name zipkin-server -d --r
1 概要 通过引入结构化并发编程的API,简化并发编程。结构化并发将在不同线程中运行的相关任务组视为单个工作单元,从而简化错误处理和取消操作,提高可靠性,并增强可观察性。这是一个预览版的API。 2 历史 结构化并发是由JEP 428提出的,并在JDK 19中作为孵化API发布。它在JDK 20中被JEP 437重新孵化,通过对作用域值(JEP 429)进行轻微更新。 我们在这里提议将结构化并发作
所有代码需要在安装了OpenCV库的Python环境中运行。1 图像基础操作import cv2 as cv img = cv.imread("./img/run.png", flags=cv.IMREAD_COLOR) print(img) [[[255 255 255] [255 255 255] [255 255 255] ... [255 255 25
提升I/O设备速度,HDD换成SSD,仍觉不够快PCI Express接口的SSD硬盘替代SATA接口的SSD硬盘,还是不够快但无论I/O速度如何提升,比CPU还是太慢。SSD IOPS可到2万、4万,但CPU主频2GHz以上,每秒20亿次操作。如对I/O操作都由CPU发出对应指令,然后等待I/O设备完成操作后返回,那CPU有大量时间浪费在等待I/O设备完成操作。这种等待无实际意义,对I/O设备大
Spring容器创建后,会调用它的refresh方法,refresh的时候会做很多事情:如完成配置类解析、各种BeanFactoryPostProcessor和BeanPostProcessor的注册、国际化配置的初始化、web内置容器的构造等等。web程序对应Spring容器为AnnotationConfigServletWebServerApplicationContext。ServletWe
@SpringBootApplication( scanBasePackages = {"com.javaedge.base"} ) public class BaseApplication { public BaseApplication() { } public static void main(String[] args) { SpringA
0 前言SpringBoot对日志的配置和加载进行了封装,让我们可以很方便地使用一些日志框架,只需要定义对应日志框架的配置文件,如LogBack、Log4j、Log4j2等,代码内部便可以直接使用。如我们在resources目录下定义了一个logback xml文件,文件内容是logback相关配置,然后就可以直接在代码在使用Logger记录日志啦:SpringBoot对日志功能的封装:1 Log
使用2PC可保证分布式事务的原子性,但2PC性能究竟如何呢?1 到底多慢?看一组数据。2013年MySQL技术大会(Percona Live MySQL C&E 2013),Randy Wigginton等在“Distributed Transactions in MySQL”演讲中公布一组XA事务与单机事务对比数据的折线图:横坐标:并发线程数量纵坐标:事务延迟,ms蓝色折线:单机事务红色
数据复制典型的算法就是Paxo和Raft。1 分片元数据的存储分布式存储系统中,收到客户端请求后,承担路由功能的节点:先访问分片元数据(简称元数据),确定分片对应节点然后才访问真正数据元数据,一般包括分片的数据范围、数据量、读写流量和分片副本处于哪些物理节点及副本状态等信息。存储角度,元数据也是数据,但特别之处在于每个请求都要访问它,所以元数据的存储很容易成为整个系统性能瓶颈和高可靠性短板。如系统
大规模的业务应用下,单体数据库遇到的主要问题首先是写性能不足,,另外还有存储方面的限制。而分片就是解决性能和存储这两个问题的关键设计,甚至不仅是分布式数据库,在所有分布式存储系统中,分片这种设计都是广泛存在的。1 什么是分片在不同系统中有别名:Spanner和YugabyteDB称TabletHBase和TiDB称RegionCockraochDB称Range分片是一种水平切分数据表的方式,数据记
TrueTime吗?作为全局时钟的一种实现形式,是Google通过 GPS和原子钟两种方式混合提供的授时机制,误差可以控制在7毫秒以内。正是在这7毫秒内,时光可能倒流。分布式数据库的很多设计都和时间有关,更确切地说是和全局时钟有关。如线性一致性基础就是全局时钟,MVCC、快照、乐观协议与悲观协议,都和时间有关。1 常见授时方案区分授时机制,抓住三要素:时间源:单、多个使用的时钟类型:物理时钟、混合
1 前言分布式数据库已是技术新潮,产品越来越多,技术选型或想学习,如何下手?怎么更高效了解不同产品特点?就要分类,有些差不多产品,熟悉其中一个,剩下只要记下差异点。如何分类?业界已有共识,分布式数据库可按架构风格分为:NewSQL,代表系统是Google Spanner从单体数据库中间件基础上演进出来的,Prxoy风格,无公认的代表系统。Prxoy名太笼统,无法反映架构全貌,还要有具体的架构模板,
2020年5月份,6.0版本。面向网络处理的多IO线程可以提高网络请求处理的速度,而客户端缓存可以让应用直接在客户端本地读取数据,这两个特性可以提升Redis的性能。细粒度权限控制让Redis可以按照命令粒度控制不同用户的访问权限,加强了Redis的安全保护。RESP 3协议则增强客户端的功能,可以让应用更加方便地使用Redis的不同数据类型。1 从单线程处理网络请求到多线程处理Redis单线程架
远程调试是一项重要的技术,特别是对于使用IDEA开发的开发者来说。在本篇技术博客中,我们将探讨如何使用IDEA进行远程调试。1 IDEA 配置首先,我们需要确保我们的开发环境已经准备就绪。我们需要在远程服务器上安装并配置好调试器,如GDB或LLDB。我们还需要在本地计算机上安装IDEA,并确保我们的代码已经正确地导入到IDEA中。接下来,我们需要创建一个远程调试配置。在IDEA中,我们可以通过选择
上节讨论了如何保障数据中台的数据质量,让数据“准”。除了“快”和“准”,数据中台还离不开“省”。随数据规模越来越大,成本越来越高,如不合理控制成本,还没等你挖掘出数据应用价值,企业利润就被消耗完。 能否做到精细化成本管理,关乎数据中台项目成败。 某电商业务数据建设资源增长趋势(CU= 1vcpu + 4G memory): 某电商平台的大数据资源消耗增长趋势,2019全年资源规模25000CU,
1 jps类似Linux的ps,但jps只列Java进程。方便查看Java进程的启动类、传入参数和JVM参数。直接运行,不加参数,列出Java程序的进程ID及Main函数名称,本质也是Java程序:[root@backend-dev opt]# jps 23744 Jps 21969 jar# 输出传递给Java进程的参数 [root@backend-dev opt]# jps -m 23
MySQL 和 Redis 的监控的核心原理:连到实例执行特定语句命令拉取数据,类似还有 MongoDB,算一类监控场景。要做好Kafka监控:先了解 Kafka基础概念,如Topic(主题)、Partition(分区)、Replica(副本)、AR(Assigned Replicas)、ISR(In-Sync Replicas)、OSR(Out-of-Sync Replicas)、HW(High
1 发展历程20世纪50年代:人工智能概念诞生1956年,“人工智能”这个术语由麦卡锡在达特茅斯会议上首次提出主要研究逻辑和推理,以及如何在机器上模拟人类智能20世纪60年代:知识表达期开始研究知识表达,使用谓词逻辑来表达知识开发可以解题的专家系统,例如Dendral专家系统20世纪70年代:知识库期研究汇集知识到知识库,并开发程序利用知识库做推理出现视觉、语音、运动控制等领域的专家系统20世纪8
正因种种严苛条件,TLS才够安全,因为满足这些前提条件后,真正数据传送就令人放心。除非你调动超级计算机,要不然一个TLS连接里的加密数据,你真无法破解。但若排查工作确实需要解开密文,查看应用层信息,又该咋办?研究TLS解密的技术要点及背后技术原理,最后实战。1 TLS加密原理TLS结合了对称加密和非对称加密这两大类算法的优点,密码套件是四种主要加密算法的组合。1.1 解读TLS证书下面这证书是访问
签前面三个案例里的HTTP都没加密,使排查工作省去不少麻烦,抓包文件里直接就看清应用层信息。但现实越来越多站点做HTTPS加密,所以像前面的三讲那样Wireshark里直接看到应用层信息的 case 越来越少。根据w3techs.com 调查数据,Internet 78%以上的站点默认HTTPS。要对Internet上的问题做应用层方面的分析,TLS是绕不开的坎。我主要内网问题,不关心太多HTTP
Copyright © 2005-2023 51CTO.COM 版权所有 京ICP证060544号