thumbnail
宝宝都能看懂的虚拟线程原理及实战
理论 简介 虚拟线程具有和 Go 语言的 goroutines 和 Erlang 语言的进程类似的实现方式,它们是用户模式(user-mode)线程的一种形式。 在过去 Java 中常常使用线程池来进行平台线程的共享以提高对计算机硬件的使用率,但在这种异步风格中,请求的每个阶段可能在不同的线程上执行,每个线程以交错的方式运行属于不同请求的阶段,与 …
thumbnail
Java高并发革命!JDK19新特性——虚拟线程(Virtual Threads)

虚拟线程具有和 Go 语言的 goroutines 和 Erlang 语言的进程类似的实现方式,它们是用户模式(user-mode)线程的一种形式。

在过去 Java 中常常使用线程池来进行平台线程的共享以提高对计算机硬件的使用率,但在这种异步风格中,请求的每个阶段可能在不同的线程上执行,每个线程以交错的方式运行属于不同请求的阶段,与 Java 平台的设计不协调从而导致:

  • 堆栈跟踪不提供可用的上下文
  • 调试器不能单步执行请求处理逻辑
  • 分析器不能将操作的成本与其调用方关联。

而虚拟线程既保持与平台的设计兼容,同时又能最佳地利用硬件从而不影响可伸缩性。虚拟线程是由 JDK 而非操作系统提供的线程的轻量级实现

  • 虚拟线程是没有绑定到特定操作系统线程的线程。
  • 平台线程是以传统方式实现的线程,作为围绕操作系统线程的简单包装
Mirai机器人异步上传Minio
需求:在发送消息的同时将图片上传到Minio,从而提高bot响应性能 代码如下: 线程池配置类 package com.example.qqbot.config;​import org.springframework.context.annotation.Bean;import org.springframework.context.annotat…
thumbnail
【论文阅读笔记】MapReduce: Simplified Data Processing on Large Clusters

MapReduce 是一个用于处理和生成大型数据集的编程模型和相关实现。

  • 用户指定一个 map 函数 处理一个key/value对来生成一组中间 key/value对 (把大规模的问题分解为子问题)
  • 以及一个 reduce 函数 来合并与同一个中间键相关的所有中间值(把子问题的解汇总)

许多现实世界的任务都可以用这个模型来表达,正如本文所示。

thumbnail
RabbitMQ

2007 年发布,是一个在AMQP(高级消息队列协议)基础上完成的,可复用的企业消息系统,是当前最主流的消息中间件之一。

优点:由于 erlang 语言的高并发特性,性能较好;吞吐量到万级,MQ 功能比较完备,健壮、稳定、易 用、跨平台、支持多种语言 如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP 等,支持 AJAX 文档齐全;开源提供的管理界面非常棒,用起来很好用,社区活跃度高;更新频率相当高

thumbnail
MongoDb基础
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。 在高负载的情况下,添加更多的节点,可以保证服务器性能。 MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
起航

不要沉醉于这个虚幻的宁静长夜
夜幕终究会被打破

不要沉溺于你们温暖的摇篮
摇篮总有一天会倾覆

不要沉睡在心灵的庇护所中
心灵的庇护迟早会成为无法打破的枷锁

启程吧,在群星闪烁之前
启程吧,在长夜结束之前
再不快些出发,白昼就降临了

530 日 , 2022 12:44
thumbnail
微服务架构原理与治理

微服务架构的三大要素

  • 服务治理
    • 服务注册
    • 服务发现
    • 负载均衡
    • 扩缩容
    • 流量治理
    • 稳定性治理
  • 可观测性
    • 日志采集
    • 日志分析
    • 监控打点
    • 监控大盘
    • 异常报警
    • 链路追踪
  • 安全
    • 身份验证
    • 认证授权
    • 访问令牌
    • 审计
    • 传输加密
    • 黑产攻击
thumbnail
深入浅出 RPC 框架

RPC(Remote Procedure Call Protocol)远程过程调用协议。一个通俗的描述是:客户端在不知道调用细节的情况下,调用存在于远程计算机上的某个对象,就像调用本地应用程序中的对象一样。

比较正式的描述是:一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。

thumbnail
详解MySQL索引

索引(在MySQL中也叫作“键(key)”)是存储引擎用于快速找到记录的一种数据结构。这是索引的基本功能

在MySQL中,存储引擎使用索引,先在索引中找到对应值,然后根据匹配的索引记录找到对应的数据行。

即:MySQL先在索引上按值进行查找,然后返回所有包含该值的数据行。

索引可以包含一个或多个列的值。如果索引包含多个列,那么列的顺序也十分重要,因为MySQL只能高效地使用索引的最左前缀列

thumbnail
认证授权基础

  • Authentication(认证) 是验证您的身份的凭据(例如用户名/用户 ID 和密码),通过这个凭据,系统得以知道你就是你,也就是说系统存在你这个用户。所以,Authentication 被称为身份/用户验证。
  • Authorization(授权) 发生在 Authentication(认证) 之后。授权主要掌管我们访问系统的权限。比如有些特定资源只能具有特定权限的人才能访问比如 admin,有些对系统资源操作比如删除、添加、更新只能特定人才具有。
thumbnail
Redis高可用

在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常服务。但是在Redis语境中,高可用的含义要宽泛一些,除了保证提供正常服务(如主从分离、快速容灾技术),还需要考虑数据容量的扩展、数据安全不会丢失等。

1、持久化:持久化是最简单的高可用方法(有时甚至不被归为高可用的手段),主要作用是数据备份,即将数据存储在硬盘,保证数据不会因进程退出而丢失。

2、复制:复制是高可用Redis的基础,哨兵和集群都是在复制基础上实现高可用的。复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复。缺陷:故障恢复无法自动化;写操作无法负载均衡;存储能力受到单机的限制。

3、哨兵:在复制的基础上,哨兵实现了自动化的故障恢复。缺陷:写操作无法负载均衡;存储能力受到单机的限制。

4、集群:通过集群,Redis解决了写操作无法负载均衡,以及存储能力受到单机限制的问题,实现了较为完善的高可用方案。

thumbnail
Redis基础

  • Redis是一个开源key-value存储系统
  • 和Memcached类似,它支持存储的value类型相对更多,包括stringlistsetzsethash
  • 这些数据类型都支持push/popadd/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性
  • 在此基础上,Redis支持各种不同方式的排序
  • 与memcache一样,为了保证效率,数据都是缓存在内存
  • 区别是Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件
  • 并且在此基础上实现了master-slave(主从)同步
thumbnail
SpringBoot自动配置底层源码分析

  • SpringBoot先加载所有的自动配置类 xxxxxAutoConfiguration
  • 每个自动配置类按照条件进行生效,默认都会绑定配置文件指定的值。xxxxProperties里面拿。xxxProperties和配置文件进行了绑定
  • 生效的配置类就会给容器中装配很多组件
  • 只要容器中有这些组件,相当于这些功能就有了
  • 定制化配置
  • 用户直接自己@Bean替换底层的组件
  • 用户去看这个组件是获取的配置文件什么值就去修改。

xxxxxAutoConfiguration ---> 组件 ---> xxxxProperties里面拿值 ----> application.properties

thumbnail
Mybatis

  1. MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架
  2. MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集
  3. MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录
  4. MyBatis 是一个 半自动的ORM(Object Relation Mapping)框架
thumbnail
SpringMVC手撕源码

以下源码手撕过程纯粹个人分析,逐字逐句,层层递进。

本文分析了SpringMVC的init及service两个方法的全过程,如有疏漏,欢迎指出。

thumbnail
SpringMVC

MVC是一种软件架构的思想,将软件按照模型、视图、控制器来划分

M:Model模型层,指工程中的JavaBean,作用是处理数据

JavaBean分为两类:

  • 一类称为实体类Bean:专门存储业务数据的,如 Student、User 等
  • 一类称为业务处理 Bean:指 Service 或 Dao 对象,专门用于处理业务逻辑和数据访问。

V:View视图层,指工程中的html或jsp等页面,作用是与用户进行交互,展示数据

C:Controller控制层,指工程中的servlet,作用是接收请求和响应浏览器