自从Docker在2013年初上线以来,就与程序员及系统管理员之间产生了一种爱恨交加的奇妙关系。虽然与我交谈过的一些经验丰富的的开发人员都非常不喜欢容器化(稍后会详细介绍), 但是为什么许多大公司,包括eBay、Twitter、Spotify和Lyft在内,都在他们的生产环境中采用了Docker呢?
Docker究竟是做什么的呢?
不知道您是否曾使用过VMware、VirtualBox、Parallels或任何其他的虚拟化软件呢?Docker和这些软件差不多(尽管...
阅读全文
Fatal Error:Allowed memory size of xxxxxx bytes exhausted,相信大家在服务器上会经常看到这个报错,这个究竟是什么意思?要如何解决呢?
服务器很多自动任务的php脚本占用服务内存过多,并且程序不在运行了。
解决方法:
在运行PHP程序,通常会遇到“Fatal Error:Allowed memory size of xxxxxx bytes exhausted”的错误, 这个意味着PHP脚本使用了过多的内存,并超出了系统对其设置的允许最大内存。解决这...
阅读全文
和 Flexvolume 类似,CSI 也是为第三方存储提供数据卷实现的抽象接口。
有了 Flexvolume,为何还要 CSI 呢?
Flexvolume 只是给 kubernetes 这一个编排系统来使用的,而 CSI 可以满足不同编排系统的需求,比如 Mesos,Swarm。
其次 CSI 是容器化部署,可以减少环境依赖,增强安全性,丰富插件的功能。我们知道,Flexvolume 是在 host 空间一个二进制文件,执行 Flexvolum 时相当于执行了本地的一个 shell 命令,...
阅读全文
Flexvolume 是 Volume Plugins 的一个扩展,主要实现 Attach/Detach/Mount/Unmount 这些接口。我们知道这些功能本是由 Volume Plugins 实现的,但是对于某些存储类型,我们需要将其扩展到 Volume Plugins 以外,所以我们需要把接口的具体实现放到外面。
我们可以看到,Volume Plugins 其实包含了一部分 Flexvolume 的实现代码,但这部分代码其实只有一个 “Proxy”的功能。
比如当 AD Controller 调用插件的一个 Atta...
阅读全文
容器存储是 Kubernetes 系统中提供数据持久化的基础组件,是实现有状态服务的重要保证。Kubernetes 默认提供了主流的存储卷接入方案(In-Tree),同时也提供了插件机制(Out-Of-Tree),允许其他类型的存储服务接入 Kubernetes 系统服务。本文将从 Kubernetes 存储架构、存储插件原理、实现等方面进行讲解,希望大家有所收获。
Kubernetes 存储体系架构
引例: 在 Kubernetes 中挂载一个 Volume
首先以一个 Volume ...
阅读全文
Charles 是一款运行在 PC 端的 Web 代理工具,它支持 Windows,Mac,Linux 操作系统。通过配置代理,Charles 可以记录和展示我们的设备和 Internet 之间交流的所有数据。因此使用它我们可以调试分析我们的应用程序接口,抓取接口传输的数据。
Charles主要具备如下特色功能:
支持 Https 协议;
限制带宽,模拟延迟效果;
支持 JSON 和 XML 格式化展示效果;
树形展示数据消息;
重发网络请求;
更改...
阅读全文
有一天隔壁组的小王灰头土脸的跑过来,问我说:“李哥,你会设计微服务网关系统吗?”。我一愣,小王怎么突然问这么抽象的问题,关键是我们最近也没有这样的需求。吃午饭的时候,在我旁敲侧击的追问下,小王招供了,原来小王偷偷跑去阿里面试了。技术一面挺顺利的,结果在技术二面的时候卡住了,面试官问了小王关于网关的问题。对话大致如下:
面试官:“你们的微服务有统一的网关吗?”。
小王:“有呀,我们使用了 Sprin...
阅读全文
你已经知道管程 synchronized 是通过锁对象所关联的 Monitor 对象的计数来标识线程对锁的占有状态,那么你知道 ReentrantLock 是如何来控制锁的占有状态吗?
Lock 锁采用了与 Monitor 对象计数完全不同的一种方式,它依赖了并发包中的 AbstractQueuedSynchronizer (队列同步器简称 AQS ) 来实现在多线程情况下对锁状态的控制。那么 AQS 是如何保证在多线程场景中锁状态可以正常控制呢。
主要使用了如下 3 个技术点:...
阅读全文
ConcurrentHashMap 是如何进行管理它的容量的,也就是当我们调用它的 size 方法的时候发生了什么?
毕竟是要支持并发,ConcurrentHashMap 的扩容操作比较复杂,我们将从以下几点来带讨论一下它的扩容。
触发扩容
1. 添加新元素后,元素个数达到扩容阈值触发扩容。
2. 调用 putAll 方法,发现容量不足以容纳所有元素时候触发扩容。
3. 某个槽内的链表长度达到 8,但是数组长度小于 64 时候触发扩容。
...
阅读全文
生成模型和迁移文件
php artisan make:model Models/Shoping/Category -m
app/Models/Shoping/Category.php
< ?php
namespace App\Models\Shoping;
use Encore\Admin\Traits\AdminBuilder;
use Encore\Admin\Traits\ModelTree;
use Illuminate\Database\Eloquent\Model;
/**
*
* Class Category
* @package App\Models\Shoping
*/
class Category extends M...
阅读全文