万猫学社_社区达人页

个人头像照片
万猫学社
已加入开发者社区1794
勋章 更多
个人头像照片
专家博主
专家博主
个人头像照片
星级博主
星级博主
个人头像照片
技术博主
技术博主
个人头像照片
门派掌门
门派掌门
成就
已发布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年01月

  • 01.15 09:14:42
    发表了文章 2024-01-15 09:14:42

    使用 Apache PDFBox 操作PDF文件

    Apache PDFBox库是一个开源的Java工具,专门用于处理PDF文档。它允许用户创建全新的PDF文件,编辑现有的PDF文档,以及从PDF文件中提取内容。此外,Apache PDFBox还提供了一些命令行实用工具。
  • 01.15 09:13:51
    发表了文章 2024-01-15 09:13:51

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

    除了借助ChatGPT通过问答的方式生成代码,也可以通过IDEA插件在写代码是直接帮助我们生成代码。 目前,IDEA插件有CodeGeeX、CodeWhisperer、Copilot。其中,CodeGeeX和CodeWhisperer是完全免费的,Copilot是收费的,每月10美元。 下面我们来了解CodeWhisperer的安装和使用,如果你还想了解其他的可以在评论告诉我。
  • 01.15 09:06:29
    发表了文章 2024-01-15 09:06:29

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

    Spring Boot 提供了简单易用的事务控制功能,方便开发者进行数据库操作时保证数据的一致性和完整性。本文将介绍 Spring Boot 事务控制的用法和应用场景,并提供丰富的例子。
  • 01.10 09:12:52
    发表了文章 2024-01-10 09:12:52

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

    对称加密算法有很多种,其中较为知名的有AES(高级加密标准)、DES(数据加密标准)以及3DES(三重数据加密算法)等。这些算法在不同的场景下有着广泛的应用,为保障数据安全提供了有力支持。
  • 01.10 09:12:11
    发表了文章 2024-01-10 09:12:11

    怎么Java进行MD5摘要加密?

    MD5(Message-Digest Algorithm 5)是一种常用的摘要算法,用于将任意长度的数据转换为固定长度的摘要值(通常为128位)。MD5算法的原理是将原始数据分成若干个固定长度的块,对每个块进行一系列的数据处理,最终得到一个128位的摘要值。这个摘要值可以作为数据的唯一标识,用于验证数据的完整性和真实性。
  • 01.10 09:10:53
    发表了文章 2024-01-10 09:10:53

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

    大家好,欢迎来到万猫学社,跟我一起学,你也能成为微服务专家。
  • 01.09 08:58:52
    发表了文章 2024-01-09 08:58:52

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

    大家好,欢迎来到万猫学社,跟我一起学,你也能成为微服务专家。
  • 01.09 08:57:52
    发表了文章 2024-01-09 08:57:52

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

    大家好,欢迎来到万猫学社,跟我一起学,你也能成为微服务专家。
  • 01.09 08:57:07
    发表了文章 2024-01-09 08:57:07

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

    大家好,欢迎来到万猫学社,跟我一起学,你也能成为微服务专家。
  • 01.08 09:53:42
    发表了文章 2024-01-08 09:53:42

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

    大家好,欢迎来到万猫学社,跟我一起学,你也能成为微服务专家。
  • 01.08 09:51:54
    发表了文章 2024-01-08 09:51:54

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

    大家好,欢迎来到万猫学社,跟我一起学,你也能成为微服务专家。
  • 01.08 09:49:34
    发表了文章 2024-01-08 09:49:34

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

    大家好,欢迎来到万猫学社,跟我一起学,你也能成为微服务专家。
  • 01.05 09:49:49
    发表了文章 2024-01-05 09:49:49

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

    大家好,欢迎来到万猫学社,跟我一起学,你也能成为微服务专家。再介绍什么是微服务之前,我们先了解一下微服务架构的历史,也就是微服务是如何提出来的。
  • 01.05 09:41:22
    发表了文章 2024-01-05 09:41:22

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

    创建目标规则,访问 httpbin 服务时应用熔断配置 在 fortio 服务中向 httpbin 服务的发出并发请求

2022年08月

  • 08.10 16:37:49
    发表了文章 2022-08-10 16:37:49

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

    为了方便理解,以 Istio 官方提供的 Bookinfo 应用示例为例,利用 ratings 服务外部 MySQL 数据库。
  • 08.10 16:36:14
    发表了文章 2022-08-10 16:36:14

    一张图快速了解 Istio 的 EnvoyFilter

    EnvoyFilter 提供了一种机制来定制 Istio Pilot 生成的 Envoy 配置。使用 EnvoyFilter 修改某些字段的值,添加特定的过滤器,甚至添加全新的侦听器、集群等等。
  • 08.10 16:23:41
    发表了文章 2022-08-10 16:23:41

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

    Envoy 访问日志记录了通过 Envoy 进行请求 / 响应交互的相关记录,可以方便地了解具体通信过程和调试定位问题。
  • 08.09 19:33:09
    发表了文章 2022-08-09 19:33:09

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

    5 个 Istio 访问外部服务的流量控制常用例子,强烈建议收藏起来,以备不时之需。
  • 08.09 19:30:14
    发表了文章 2022-08-09 19:30:14

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

    10 个 Istio 流量管理 最常用的例子,强烈建议收藏起来,以备不时之需。
  • 08.09 19:26:52
    发表了文章 2022-08-09 19:26:52

    图解VirtualBox安装CentOS 7

    VirtualBox是由德国InnoTek软件公司出品的虚拟机软件,现在则由甲骨文公司进行开发,是甲骨文公司xVM虚拟化平台技术的一部分。
  • 08.08 10:40:36
    发表了文章 2022-08-08 10:40:36

    Dapr在Java中的实践 之 状态管理

    状态管理(State Management)使用键值对作为存储机制,可以轻松的使长时运行、高可用的有状态服务和无状态服务共同运行在我们的服务中。
  • 08.08 10:38:34
    发表了文章 2022-08-08 10:38:34

    Dapr在Java中的实践 之 服务调用

    通过服务调用(Service-to-service Invocation),服务可以使用 gRPC 或 HTTP 这样的标准协议来发现并可靠地与其他服务通信。Dapr采用边车(Sidecar)、去中心化的架构。 要使用Dapr来调用服务,可以在任意Dapr实例上使用invoke这个API。 边车编程模型鼓励每个服务与自己的Dapr实例对话。 Dapr实例会相互发现并进行通信。
  • 08.08 10:34:38
    发表了文章 2022-08-08 10:34:38

    Dapr在Java中的实践 之 环境准备

    Dapr (Distributed Application Runtime)是一个可移植的、事件驱动的运行时,它使任何开发人员都可以轻松地构建运行在云和边缘上的弹性、无状态和有状态的应用程序,并支持语言和开发人员框架的多样性。Dapr利用Sidecar架构的优势,帮助我们解决构建微服务所带来的挑战,并保持代码与平台无关。
  • 08.05 11:44:59
    发表了文章 2022-08-05 11:44:59

    自从用了 Kiali 以后才知道,配置 Istio 的 流量管理 是如此容易

    在生产环境中,直接登录服务器是非常不方便的,我们可以使用Kiali配置Istio的流量管理。
  • 08.05 11:37:59
    发表了文章 2022-08-05 11:37:59

    手摸手带你 在 Windows 系统中安装 Istio

    通过负载均衡、服务间的身份验证、监控等方法,Istio 可以轻松地创建一个已经部署了服务的网络,而服务的代码只需很少更改甚至无需更改。
  • 08.05 09:46:16
    发表了文章 2022-08-05 09:46:16

    深入理解 Istio 流量管理的超时时间设置

    HTTP 请求的超时可以用路由规则的 timeout 字段来指定,那么 Istio 到底是如何实现超时时间的呢?

2022年06月

  • 06.10 09:01:51
    发表了文章 2022-06-10 09:01:51

    图解 Apache SkyWalking UI 的使用

    Apache SkyWalking的UI界面主要分为以下几个区域: 功能选择区:这里列出了主要的UI功能,包括仪表盘、拓扑图、追踪、性能刨析、告警等功能 重新加载区:控制重新加载机制,包括定期重新加载或手动重新加载。 时间选择器:控制时区和时间范围。这里有一个中文/英文切换按钮,默认,UI使用浏览器语言设置。 下面逐一介绍功能选择区的各个功能:

2022年04月

  • 04.22 09:12:04
  • 04.22 09:10:27
  • 04.22 09:07:48
    回答了问题 2022-04-22 09:07:48

    如何实现分层存储?

    踩0 评论0
  • 04.20 14:06:07
    回答了问题 2022-04-20 14:06:07

    程序员35岁后的出路

    踩0 评论0
  • 04.17 15:33:17
    发表了文章 2022-04-17 15:33:17

    手把手带你使用Paint in 3D和Photon撸一个在线涂鸦画板

    Paint in 3D用于在游戏内和编辑器里绘制所有物体。所有功能已经过深度优化,在WebGL、移动端、VR 以及更多平台用起来都非常好用! 它支持标准管线,以及 LWRP、HDRP 和 URP。通过使用GPU 加速,你的物体将以难以置信的速度被绘制。代码还经过深度优化来防止GC,和将所有绘制操作一起批次完成。 跟贴图系统不同,它是一个纹理绘制解决方案。这意味着你可以绘制你的物体上百万次,还是无帧率丢失,让你创作难以想象的游戏。
  • 04.17 15:32:49
    发表了文章 2022-04-17 15:32:49

    老徐和阿珍的故事:缓存穿透、缓存击穿、缓存雪崩、缓存热点,傻傻分不清楚

    阿珍:“在高并发下遇到瓶颈的时候,经常会用到缓存来提高整个系统的性能。” 老徐:“嗯,不过缓存能够大大提升整个系统的性能,但同时也引入了更多复杂性。” 阿珍点了点头,说:“是啊,缓存穿透、缓存击穿、缓存雪崩、缓存热点这些东西,这些东西我一直分不清楚,经常混淆。” 老徐立刻自信满满地说:“这个我懂啊,你听我给你娓娓道来。”
  • 04.17 15:32:24
    发表了文章 2022-04-17 15:32:24

    老徐和阿珍的故事:ArrayList和LinkedList的效率到底哪个高?

    老徐问道:“阿珍,你知道ArrayList和LinkedList的区别吗?” 阿珍微微一笑,说:“这也太小儿科了,ArrayList是基于数组实现,LinkedList是基于链表实现。” 老徐竖起了大拇指,说:“不错,有进步!那你知道ArrayList和LinkedList的效率到底哪个高?” 阿珍回答:“这也难不倒我,这要分不同情况的。在新增、删除元素时,LinkedList的效率要高于ArrayList,而在遍历的时候,ArrayList的效率要高于LinkedList。” 老徐反问到:“不一定哦。在新增、删除元素时,LinkedList的效率有可能低于ArrayList,而在遍历
  • 04.16 22:18:36
    发表了文章 2022-04-16 22:18:36

    老徐和阿珍的故事:强引用、软引用、弱引用、虚引用,傻傻分不清楚

    阿珍:“老徐,你这茶杯了泡的什么?红红的。” 老徐:“这是枸杞呀。” 阿珍:“枸杞?你最近什么干多了,这么虚!” 老徐:“怎么可能?看我这身体,不弱的好吧!” 阿珍一脸坏笑地说:“那就是软了。” 老徐的老脸一红,辩解到:“我这是养养生,我很强的,好吧。” 看着老徐的窘态,阿珍笑出来声。老徐起身刚要走,阿珍一把拽住老徐,说:“跟你开玩笑呢,问你个正事,我一直分不清Java的强引用、软引用、弱引用、虚引用,给我讲讲呗。” 老徐立刻自信满满的坐下,说:“那你可问对人了,我对这方面颇有研究。这四种引用级别由高到低依次是:强引用、软引用、弱引用、虚引用。”
  • 04.16 22:18:05
    发表了文章 2022-04-16 22:18:05

    老徐和阿珍的故事:CAP是什么?超级爱放P吗?

    阿珍吃完饭刚刚回来,看到老徐正在吃方便面,说:“老徐,不至于吧。你为了还债,中午就吃这个呀?” 老徐不慌不忙地嚼着方便面,说:“这可是白象的方便面,国货之光,超级难买,我好不容易才买到的。” 阿珍坐了下来,说:“闻着还挺香,我也买点尝尝。对了,老徐,上午开会的时候,听你们总说CAP、CAP的,CAP是什么意思?超级爱放P吗?” 老徐嘴里方便面差点喷了出来,笑着说:“第一次听你这么解释的,来!我给你科普一下。”
  • 04.16 22:17:41
    发表了文章 2022-04-16 22:17:41

    老徐和阿珍的故事:Runnable和Callable有什么不同?

    阿珍探出头看了看老徐的屏幕,全部都是绿色的曲线图,好奇地问:“老徐,你看的这是什么?”老徐看的太入神,转过头才发现阿珍,尬尴地笑了笑说:“我就是看看最近的行情。”老徐立马切换了窗口。 阿珍没在意又继续问到:“Runnable和Callable两个接口我总搞混,这个到底有什么不同?”
  • 04.15 11:53:07
    发表了文章 2022-04-15 11:53:07

    5分钟了解Redis的内部实现跳跃表(skiplist)

    跳跃表(skiplist)是一个有序的数据结构,它通过在每个节点维护不同层次指向后续节点的指针,以达到快速访问指定节点的目的。跳跃表在查找指定节点时,平均时间复杂度为,最坏时间复杂度为O(N)。
  • 04.15 11:52:40
    发表了文章 2022-04-15 11:52:40

    5分钟了解Redis的内部实现快速列表(quicklist)

    在Redis3 .2版本之前,存储列表(list)数据结构使用的是压缩列表(ziplist)和链表(linkedlist),当列表元素个数比较少并且每个元素占用空间比较小的时候,使用压缩列表。当列表元素个数比较多或者某个元素占用空间比较大的时候,使用链表。
  • 04.15 11:52:12
    发表了文章 2022-04-15 11:52:12

    Java的jstack命令使用详解

    jstack(Java Virtual Machine Stack Trace)是JDK提供的一个可以生成Java虚拟机当前时刻的线程快照信息的命令行工具。线程快照一般被称为threaddump或者javacore文件,是当前Java虚拟机中每个线程正在执行的Java线程、虚拟机内部线程和可选的本地方法堆栈帧的集合。对于每个方法栈帧,将会显示完整的类名、方法名、字节码索引(bytecode index,BCI)和行号。生成的线程快照可以用于定位线程出现长时间停顿的原因,比如:线程间死锁、死循环、请求外部资源被长时间挂起等等。
  • 04.14 08:49:16
    发表了文章 2022-04-14 08:49:16

    Linux常用性能诊断命令详解

    top命令动态地监视进程活动与系统负载等信息。 使用示例: top 效果如下图:
  • 04.14 08:48:47
    发表了文章 2022-04-14 08:48:47

    Java的jmap命令使用详解

    jmap(Java Virtual Machine Memory Map)是JDK提供的一个可以生成Java虚拟机的堆转储快照dump文件的命令行工具。除此以外,jmap命令还可以查看finalize执行队列、Java堆和方法区的详细信息,比如空间使用率、当前使用的什么垃圾回收器、分代情况等等。
  • 04.14 08:48:19
    发表了文章 2022-04-14 08:48:19

    Java的jinfo命令使用详解

    jinfo(Java Virtual Machine Configuration Information)是JDK提供的一个可以实时查看Java虚拟机各种配置参数和系统属性的命令行工具。使用jps命令的-v参数可以查看Java虚拟机启动时显式指定的配置参数,如果想查看没有显式指定的配置参数就可以使用jinfo命令进行查看。另外,jinfo命令还可以查询Java虚拟机进程的System.getProperties()的内容。
  • 04.13 09:51:34
    发表了文章 2022-04-13 09:51:34

    快速整明白Redis中的字典到底是个啥

    字典是一种用于保存键值对的数据结构,可以通过键值对中的键快速地查找到对应的值。在Redis所使用的C语言中,并没有内置字典,所以Redis自己实现了字典。 整个Redis数据库的所有的键和值就组成了一个全局的字典,对数据库的增删改查操作都是构建在字典的操作之上的。 字典还是Redis的基本数据类型哈希(hash)的底层实现之一,当哈希数据类型的键和值的长度较大或者键值对数量较多的时候,Redis就会把字典作为哈希数据类型的底层实现。 字典还是Redis的基本数据类型有序集合(zset)的底层实现之一,当有序集合中的所有元素的成员长度较长或者元素个数较多的时候,Redis就会把跳跃表和哈希
  • 04.13 09:51:04
    发表了文章 2022-04-13 09:51:04

    Linux常用系统管理命令详解

    ps命令用于查看系统中的进程状态。 命令格式:ps [参数] 命令参数说明:
  • 04.13 09:50:34
    发表了文章 2022-04-13 09:50:34

    Java的jstat命令使用详解

    jstat(Java Virtual Machine Statistics Monitoring Tool)是JDK提供的一个可以监控Java虚拟机各种运行状态信息的命令行工具。它可以显示Java虚拟机中的类加载、内存、垃圾收集、即时编译等运行状态的信息。
  • 04.12 10:58:29
    发表了文章 2022-04-12 10:58:29

    快速整明白Redis中的整数集合到底是个啥

    整数集合(intset)是Redis集合数据类型的内部编码之一,当集合数据类型中的元素都是整数并且元素数量较少的时候,Redis就使用整数集合作为内部编码。 整数集合(intset)中可以保存int16_t、int32_t和int64_t类型的整数,而且保证
  • 04.12 10:58:03
    发表了文章 2022-04-12 10:58:03

    Linux常用文件管理命令详解

    `cat`命令用于连接文件并打印到标准输出设备上。 命令语法:`cat [参数] [文件名]` 参数说明:
  • 04.12 10:57:28
    发表了文章 2022-04-12 10:57:28

    Java的jps命令使用详解

    jps(Java Virtual Machine Process Status Tool)是JDK提供的一个可以列出正在运行的Java虚拟机的进程信息的命令行工具,它可以显示Java虚拟机进程的执行主类(Main Class,main()函数所在的类)名称、本地虚拟机唯一ID(LVMID,Local Virtual Machine Identifier)等信息。另外,jps命令只能显示它有访问权限的Java进程的信息。
  • 发表了文章 2024-01-15

    使用 Apache PDFBox 操作PDF文件

  • 发表了文章 2024-01-15

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

  • 发表了文章 2024-01-15

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

  • 发表了文章 2024-01-10

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

  • 发表了文章 2024-01-10

    怎么Java进行MD5摘要加密?

  • 发表了文章 2024-01-10

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

  • 发表了文章 2024-01-09

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

  • 发表了文章 2024-01-09

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

  • 发表了文章 2024-01-09

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

  • 发表了文章 2024-01-08

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

  • 发表了文章 2024-01-08

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

  • 发表了文章 2024-01-08

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

  • 发表了文章 2024-01-05

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

  • 发表了文章 2024-01-05

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

  • 发表了文章 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 内核实现,且需要维护虚拟设备到物理设备的地址映射表,以及保证数据一致性,所以实现难度和工作量比较大,但可扩展性和灵活性也相对较大。

    image.png

    方案实现

    该方案的实现主要包括以下内容:

    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 热度统计中的热数据向高性能存储设备迁移,冷数据向低性能存储设备迁移;手动方式由用户指定,将某块数据向高性能存储设备迁移或低性能设备迁移。手动数据迁移方式增加了更大的灵活性和可扩展性。

    image.png

    开源实现

    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 的热度信息,并且不涉及内核态的开发。该方案的结构如图所示。

    image.png

    方案实现

    该方案的实现主要包括以下内容:

    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.送外卖 image.png

    2.开网约车 image.png

    3.回老家种地 image.png

    4.摆地摊卖煎饼果子 image.png

    踩0 评论0
正在加载, 请稍后...
滑动查看更多
正在加载, 请稍后...
暂无更多信息