万猫学社_社区达人页

个人头像照片
万猫学社
已加入开发者社区2016

勋章 更多

个人头像照片
专家博主
专家博主
个人头像照片
星级博主
星级博主
个人头像照片
技术博主
技术博主
个人头像照片
江湖侠士
江湖侠士

成就

已发布155篇文章
7条评论
已回答4个问题
0条评论
已发布0个视频
github地址

技术能力

兴趣领域
  • Java
  • 程序员
  • 微服务
擅长领域
  • Java
    高级

    能力说明:

    精通JVM运行机制,包括类生命、内存模型、垃圾回收及JVM常见参数;能够熟练使用Runnable接口创建线程和使用ExecutorService并发执行任务、识别潜在的死锁线程问题;能够使用Synchronized关键字和atomic包控制线程的执行顺序,使用并行Fork/Join框架;能过开发使用原始版本函数式接口的代码。

  • 微服务
    中级

    能力说明:

    熟悉微服务常用开放框架,理解Spring、Spring Boot,以及Spring Cloud的概念和不同,对Spring Cloud Alibaba有较为全面的认知。对Istio具备基础运维能力,掌握基本组件的知识。

  • 数据库
    中级

    能力说明:

    可对MySQL数据库进行备份与恢复,可较为熟练的使用SQL语句进行单表多表查询等操作,可快速上手阿里云RDS MySQL数据库,可进行MySQL云数据库的创建、设置、数据迁移等工作。了解常见NOSQL数据库,如MongoDB、Redis、Memcached的概念、安装、配置等相关基础知识。

技术认证

暂时未有相关云产品技术能力~

微信搜索「万猫学社」关注后回复「电子书」,免费获取12本Java必读技术书籍。

暂无精选文章
暂无更多信息
  • 发表了文章 2024-05-15

    Spring Boot 的事务控制及示例代码

  • 发表了文章 2024-05-15

    使用 Apache PDFBox 操作PDF文件

  • 发表了文章 2024-05-15

    【AI帮我写代码,上班摸鱼不是梦】手摸手图解CodeWhisperer的安装使用

  • 发表了文章 2024-05-15

    3分钟快速了解使用Java进行对称加密

  • 发表了文章 2024-05-15

    怎么Java进行MD5摘要加密?

  • 发表了文章 2024-05-15

    【从零开始学微服务】07.微服务常用的开发框架

  • 发表了文章 2024-05-15

    【从零开始学微服务】06.微服务架构的建设思路

  • 发表了文章 2024-05-15

    【从零开始学微服务】04.微服务架构的特点

  • 发表了文章 2024-05-15

    【从零开始学微服务】02.初识微服务

  • 发表了文章 2024-05-15

    深入理解Istio流量管理的熔断配置

  • 发表了文章 2024-05-15

    【从零开始学微服务】01.微服务的过去与现在

  • 发表了文章 2024-05-15

    【从零开始学微服务】08.引入微服务架构的时机

  • 发表了文章 2024-05-15

    【从零开始学微服务】05.微服务的优势和不足

  • 发表了文章 2024-05-15

    【从零开始学微服务】03.软件架构的演化过程

  • 发表了文章 2022-08-10

    在 Istio 服务网格内连接外部 MySQL 数据库

  • 发表了文章 2022-08-10

    一张图快速了解 Istio 的 EnvoyFilter

  • 发表了文章 2022-08-10

    在Istio中,到底怎么获取 Envoy 访问日志?

  • 发表了文章 2022-08-09

    5个 Istio 访问外部服务流量控制最常用的例子,你知道几个?

  • 发表了文章 2022-08-09

    10个 Istio 流量管理 最常用的例子,你知道几个?

  • 发表了文章 2022-08-09

    图解VirtualBox安装CentOS 7

正在加载, 请稍后...
滑动查看更多
  • 回答了问题 2022-04-22

    使用 Docker 基本命令构建和运行镜像时,如何使用 docker run 命令运行镜像?

    docker run :创建一个新的容器并运行一个命令 语法 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] OPTIONS说明: -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项; -d: 后台运行容器,并返回容器ID; -i: 以交互模式运行容器,通常与 -t 同时使用; -P: 随机端口映射,容器内部端口随机映射到主机的端口 -p: 指定端口映射,格式为:主机(宿主)端口:容器端口 -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用; --name='nginx-lb': 为容器指定一个名称; --dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致; --dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致; -h 'mars': 指定容器的hostname; -e username='ritchie': 设置环境变量; --env-file=[]: 从指定文件读入环境变量; --cpuset='0-2' or --cpuset='0,1,2': 绑定容器到指定CPU运行; -m :设置容器使用内存最大值; --net='bridge': 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型; --link=[]: 添加链接到另一个容器; --expose=[]: 开放一个端口或一组端口; --volume , -v: 绑定一个卷 实例 使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。 docker run --name mynginx -d nginx:latest 使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口。 docker run -P -d nginx:latest 使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data。 docker run -p 80:80 -v /data:/data -d nginx:latest 绑定容器的 8080 端口,并将其映射到本地主机 127.0.0.1 的 80 端口上。 $ docker run -p 127.0.0.1:80:8080/tcp ubuntu bash 使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。 runoob@runoob:~$ docker run -it nginx:latest /bin/bash root@b8573233d675:/#
    踩0 评论0
  • 回答了问题 2022-04-22

    使用 Docker 基本命令构建和运行镜像时,如何使用 docker rm 命令删除容器?

    docker rm :删除一个或多个容器。 语法 docker rm [OPTIONS] CONTAINER [CONTAINER...] OPTIONS说明: -f :通过 SIGKILL 信号强制删除一个运行中的容器。 -l :移除容器间的网络连接,而非容器本身。 -v :删除与容器关联的卷。 实例: 强制删除容器 db01、db02: docker rm -f db01 db02 移除容器 nginx01 对容器 db01 的连接,连接名 db: docker rm -l db 删除容器 nginx01, 并删除容器挂载的数据卷: docker rm -v nginx01 删除所有已经停止的容器: docker rm $(docker ps -a -q)
    踩0 评论0
  • 回答了问题 2022-04-22

    如何实现分层存储?

    基于 Block Device 的分层存储方案 该方案完整地实现了以上提到的分层存储中所有的工作,包括虚拟化,IO 性能统计以及数据的迁移。 方案结构 该方案的结构包括一个 Linux 设备驱动程序和若干用户态的控制程序,如图 3 所示。 驱动程序实现存储设备的虚拟化,IO 性能监测统计以及数据的迁移; 用户态控制程序负责创建、删除虚拟设备,手动触发数据迁移,以及设置获取设备状态。 该方案由于 Storage Tiering 所有的功能都在 Linux 内核实现,且需要维护虚拟设备到物理设备的地址映射表,以及保证数据一致性,所以实现难度和工作量比较大,但可扩展性和灵活性也相对较大。 方案实现 该方案的实现主要包括以下内容: 1、管理设备的注册 管理设备主要用于与用户态程序的 IOCTL 交互,可以是一个字符设备或者 Misc 设备。Linux 下可以通过 register_chrdev 或 misc_register 注册,并实现所需要的 IOCTL 接口。 2、虚拟块设备的创建 用户态控制程序通过 IOCTL 向控制设备发起创建虚拟设备的请求,并传入所有的物理磁盘(DEV1,DEV2)的参数,如设备名,磁盘大小,虚拟磁盘的块大小等;驱动程序收到该请求后,进行必要的参数检查,然后调用 register_blkdev 创建一个新的块设备(VDEV)。并设置新设备的相关参数,如 IO 处理函数,队列大小,设备容量等。 3、虚拟设备地址与物理设备地址映射 虚拟设备地址到物理设备的地址映射表在虚拟设备创建是被初始化,并在数据迁移过程中被修改。 虚拟设备和物理设备都被分成固定大小的块,块大小可以固定或通过 IOCTL 由用户指定,但一旦确定,不能更改,一个 Block 是热度统计以及数据迁移的最小单位;每个 Block 包含若干个 sector(512 Byte)。 当 VDEV 收到一个 bio,可以由 bi_sector 和 bi_size 找出所对应的 VDEV 的 Block 以及 Block 内的偏移量,通过查询映射表,找到各个 VDEV Block 所对应的物理设备以及 Block,然后读取物理设备 Block 内的偏移量,如图 4 所示。 地址映射表以及其他的元数据需要存储在物理设备上,以便机器重启时能重构这个虚拟的块设备,且需要采取一定的备份策略,防止断电或磁盘损坏造成数据丢失。 4、IO 热度统计 IO 热度统计也以 Block 为基本单位,每个 Block 内的任何一个 sector 被访问,该 Block 的热度都为增加。由于大 IO 以及顺序 IO 在性能在传统硬盘和 SSD 上的差异并不是特别大,所以在进行热度统计是应该考虑排除大 IO 和顺序 IO。 5、数据迁移 可以采用自动方式或手动方式。自动方式由驱动内的定时器驱动,每隔一定的时间,启动数据迁移的扫描,将 IO 热度统计中的热数据向高性能存储设备迁移,冷数据向低性能存储设备迁移;手动方式由用户指定,将某块数据向高性能存储设备迁移或低性能设备迁移。手动数据迁移方式增加了更大的灵活性和可扩展性。 开源实现 BTier 基于 Block Device 的分层存储方案的开源实现。BTier 最大支持 16 个设备的虚拟化,这些设备被 BTier 简单地捆绑成一个 btier 块设备,因此,其中任何一个设备的失效,都会导致整个 btier 的失效。 编译并以模块形式安装 BTier 之后,会创建一个名为 tiercontrol 的字符设备; 然后使用 BTier 提供的 btier_setup 应用可以创建一个新的块设备 btiera,然后就可以对 btiera 设备进行所有块设备的读写操作,包括分区和创建文件系统。 BTier 还提供了丰富的 sysfs 接口,进行控制和信息获取,如数据迁移的开关,间隔时间,IO 统计信息等。 不过 BTier 每个 Tier 层仅支持 1 个物理设备,同层多个设备的虚拟化需要借助其他的方法,在虚拟化上面,BTier 还有可以改善的空间。 基于 LVM 的分层存储方案 Linux 的逻辑卷管理(LVM)提供了存储虚拟化,可以将多个物理卷(PV)建成一个卷组(VG),然后再在 VG 里创建虚拟卷(VG)。而且 LVM 提供了在不同物理卷之间迁移数据的 API。因此,基于 LVM 的分层存储方案借助 LVM 的虚拟化和数据迁移的能力,实现会更简单。 方案结构 该方案中,数据一致性的问题以及数据迁移时 IO 中断的问题都由 LVM 进行处理,重点在于如何分析并统计 IO 的热度信息,并且不涉及内核态的开发。该方案的结构如图所示。 方案实现 该方案的实现主要包括以下内容: 1、创建虚拟设备 使用 pvcreate 将所有的物理磁盘创建成物理卷(PV);再使用 vgcreate 将所有的 VG 创建成一个卷组(VG);最后使用 lvcreate 在创建出来的 VG 上建虚拟卷。 2、IO 热度统计 IO 热度统计可以使用 blktrace 工具,或者实现一个设备驱动来检测 IO 的热度。使用 blkparse 可以解析 blktrace 的输出,然后分析这些 IO 的分布以及读写频度,从而得到 IO 的热度统计信息。 4、数据迁移 根据 IO 的热度统计信息,使用 LVM 提供的 pvmove 工具,可以在属于同一个 VG 里的不同 PV 之间进行数据迁移,将热数据和冷数据分布存放在不同的物理卷上。 开源实现 LVMTS(LVM Tired Storage)是一个使用 SSD 和 HDD 来创建混合存储的方案,完全在用户态实现,主要由几个守护进程构成。 Lvmtscd 负责监测 blktrace 的输出并统计块设备的访问频度,并将这些统计信息记录在文件中; Lvmtsd 负责根据用户配置的信息,启动其他的守护进程,并完成数据迁移。 实际使用中发现,LVMTS 并不是太稳定,而且在 IO 分析统计上并不是太完善,可开发的空间仍然很大。
    踩0 评论0
  • 回答了问题 2022-04-20

    程序员35岁后的出路

    1.送外卖 2.开网约车 3.回老家种地 4.摆地摊卖煎饼果子
    踩0 评论0
正在加载, 请稍后...
滑动查看更多
正在加载, 请稍后...
暂无更多信息