#后端

24 篇文章

小程序实时日志

小程序真机调试看不到日志、无法复现网络请求,我们复用实时协作文档的长连接基础设施,做了一套端上采集、长连上报、Kafka 缓冲、Elasticsearch 存储、面板检索的实时日志系统,巅峰期 300 台机器维持长连、日均日志量 1.2TB。

DI&IOC基本概念

DI 和 IOC 的关系 DI(依赖注入)和 IOC(控制反转)是两个相关但不完全相同的概念。 控制反转(IOC)是一种设计原则,它强调将控制权从应用程序代码中转移到外部容器或框架中。根据 IOC 原则,应用程序的组件不应该负责自己的依赖关系的解析和管理,而是将这些责任交给外部的容器。通过 IOC,应用程序的组件变得…

高可用的四件兵器:超时、重试、限流与降级

系列目录 从单线程到线程池:云盘转 Java 后的第一堂并发课 线程池参数、队列与快慢接口隔离 数据库连接池与 Spring 声明式事务:把 Node.js 的坑填上 ConcurrentHashMap 与锁:文件元数据的并发读写 Future 与 CountDownLatch:一个接口聚合一堆下游 用 Kafka …

分布式锁与唯一 ID:多实例部署后的新问题

系列目录 从单线程到线程池:云盘转 Java 后的第一堂并发课 线程池不是 new 出来就完事:参数、队列与快慢接口隔离 数据库连接池与 Spring 声明式事务:把 Node.js 的坑填上 ConcurrentHashMap 与锁:文件元数据的并发读写 Future 与 CountDownLatch:一个接口聚合…

Tair 缓存的穿透、雪崩与可用性

系列目录 从单线程到线程池:云盘转 Java 后的第一堂并发课 线程池不是 new 出来就完事:参数、队列与快慢接口隔离 数据库连接池与 Spring 声明式事务:把 Node.js 的坑填上 ConcurrentHashMap 与锁:文件元数据的并发读写 Future 与 CountDownLatch:一个接口聚合…

压测与容量评估:IM 融合前要扛多少流量?

系列目录 从单线程到线程池:云盘转 Java 后的第一堂并发课 线程池不是 new 出来就完事:参数、队列与快慢接口隔离 数据库连接池与 Spring 声明式事务:把 Node.js 的坑填上 ConcurrentHashMap 与锁:文件元数据的并发读写 Future 与 CountDownLatch:一个接口聚合…

高性能 IO:流对流的失败率、NIO 与零拷贝

系列目录 从单线程到线程池:云盘转 Java 后的第一堂并发课 线程池不是 new 出来就完事:参数、队列与快慢接口隔离 数据库连接池与 Spring 声明式事务:把 Node.js 的坑填上 ConcurrentHashMap 与锁:文件元数据的并发读写 Future 与 CountDownLatch:一个接口聚合…

日志不是越多越好:logback 实践与线上问题定位

系列目录 从单线程到线程池:云盘转 Java 后的第一堂并发课 线程池不是 new 出来就完事:参数、队列与快慢接口隔离 数据库连接池与 Spring 声明式事务:把 Node.js 的坑填上 ConcurrentHashMap 与锁:文件元数据的并发读写 Future 与 CountDownLatch:一个接口聚合…

JVM 内存与 GC:一次线上 Full GC 排查记录

系列目录 从单线程到线程池:云盘转 Java 后的第一堂并发课 线程池不是 new 出来就完事:参数、队列与快慢接口隔离 数据库连接池与 Spring 声明式事务:把 Node.js 的坑填上 ConcurrentHashMap 与锁:文件元数据的并发读写 Future 与 CountDownLatch:一个接口聚合…

IM 消息文件实现

背景: 之前负责的云盘业务和 内部使用的大象 IM 融合,云盘需要负责大象日常 im 所有的文件流转,这里涉及到两个现有系统融合的问题,大象 之前的协议里面文件消息包含的是一个静态的链接,目前还没有上鉴权。云盘设计之初就为了保证安全性,所有分发出去的链接都是动态的,有鉴权信息和时效的。那么如何设计一个有鉴权信息而且还…

用 Kafka 做异步化与削峰:从热点上报到全局事务

系列目录 从单线程到线程池:云盘转 Java 后的第一堂并发课 线程池不是 new 出来就完事:参数、队列与快慢接口隔离 数据库连接池与 Spring 声明式事务:把 Node.js 的坑填上 ConcurrentHashMap 与锁:文件元数据的并发读写 Future 与 CountDownLatch:一个接口聚合…

Future 与 CountDownLatch:一个接口聚合一堆下游

系列目录 从单线程到线程池:云盘转 Java 后的第一堂并发课 线程池不是 new 出来就完事:参数、队列与快慢接口隔离 数据库连接池与 Spring 声明式事务:把 Node.js 的坑填上 ConcurrentHashMap 与锁:文件元数据的并发读写 Future 与 CountDownLatch:一个接口聚合…

ConcurrentHashMap 与锁:文件元数据的并发读写

系列目录 从单线程到线程池:云盘转 Java 后的第一堂并发课 线程池不是 new 出来就完事:参数、队列与快慢接口隔离 数据库连接池与 Spring 声明式事务:把 Node.js 的坑填上 ConcurrentHashMap 与锁:文件元数据的并发读写(本篇) 项目开始前需要确认的并发边界 第 1 篇排查 Spr…

数据库连接池与 Spring 声明式事务:把 Node.js 的坑填上

系列目录 从单线程到线程池:云盘转 Java 后的第一堂并发课 线程池不是 new 出来就完事:参数、队列与快慢接口隔离 数据库连接池与 Spring 声明式事务:把 Node.js 的坑填上(本篇) 从 Node.js 的事务写法开始准备 做 Java 版云盘前,我已有 Node.js、C# 等后端开发经验。Nod…

nodejs addon 结合 libuv 使用经验

最近在基于 electron 做客户端相关工作,需要写 nodejs 的 addon 以便拓展 electron 相关功能,涉及到一些高级东西,写下相关经验。 一:asynchronous addons 在开发过程中,我们一定会遇到需要在 c++中处理一些耗时的任务,这个时候,必须使用异步 addon,如果使用同步的…

线程池参数、队列与快慢接口隔离

系列目录 从单线程到线程池:云盘转 Java 后的第一堂并发课 线程池参数、队列与快慢接口隔离(本篇) 数据库连接池与 Spring 声明式事务:把 Node.js 的坑填上 上一篇讨论了 Node.js 单事件循环与 Java 请求线程池的差异。此前写过 Node.js、C# 等后端服务,我知道语言和框架改变后,阻…

从单线程到线程池:云盘转 Java 后的第一堂并发课

2015 年 9 月,云盘服务端从 Node.js 整体转向 Java,背景在之前的云盘服务端从nodejs 专项 java 相关复盘里写过。此前我做过 Node.js 和 C# 的后端开发,知道 Java 项目的请求处理会涉及多线程、共享对象和线程池。这些问题如果等到线上出现再补,很难判断范围,因此在迁移前后先集中…

云盘服务端从nodejs 专项 java 相关复盘

说明 这里是对云盘 node.js 转向 java 做的一个客观总结,个人平时也会经常使用 nodejs,go,python,C#,java 进行开发,比较熟悉各个工具链,所以也并没有语言,框架上面的歧视。 云盘 web 前后端,服务端开发是我在5月份接手的,当时所有端是基础终端来负责,服务化的事情是云计算组负责,5…

spring aop 权限拦截

在云盘服务端 java 化的进程中,我们选择使用了在 header 中添加认证头信息的方式进行权限校验,这样就触发了一个问题,spring mvc 中如何完成这个认证过程。里面有一个难点就是如果请求 body 有业务内容,我们需要获取到里面的内容进行签名,最开始我们直接实现了一个 Interceptor 类,然后通过…

dozer使用

在进行云盘项目开发的时候,经常会遇到将领域模型转化为业务模型,或者将业务模型转化为符合要求的JSON格式,这里面就涉及到大量的 Java Bean to Java Bean 的映射,我们很容易会写出来下面的代码: 这让人很不爽,所以如果两个类结构一样,最常使用的是BeanUtils.copyProperties(s…

使用v8与js做交互,理解node基本原理

前阶段刚说到全栈的问题,到底要多深,多后期才能算是全栈每个人心中都有自己的看法,我自己感觉多学一些总不是坏事。 最近用 node 遇到了一些障碍,在看 node 的源码了解一下,然后想到网上现在还没有相关的分析,大多数都是开发 addons,而且中途 v8 进行了一次大升级,很多能查到的资料都是错得,所以就在这里简单…