技术博客

Java 8新特性 - (1)Lambda表达式

javajava 8lambda

为什么Java需要Lambda表达式? 在函数式编程语言中,函数是一等公民,它们可以独立存在,你可以将其赋值给一个变量,或将他们当做参数传给其他函数。JavaScript是最典型的函数式编程语言。函数式语言提供了一种强大的功能——闭包,相比于传统的编程方法有很多优势,闭包是一个可调用的对象,它记录了一些信息,这些信息来自于创建它的作用域。

更多 →

February 25, 2021

Java 7新特性 - (1)Java语法特性

javajava 7

二进制数字表达方式 在Java 7之前,支持十进制(123)、八进制(0123)、十六进制(0X12AB)的表示形式。Java 7中增加支持二进制的表示(0B11110001、0b11110001)

更多 →

February 24, 2021

订单ES查询性能优化

elastic search性能优化

背景 由于系统中的订单量大,一些查询语句需要级联多张表来查询,单纯靠数据库的索引已经无法满足查询速度与用户界面响应速度的要求,因此在5年前引入了ES来加快查询速度。但是,原先的方案中ES存放的是全量的订单数据,并且是存放在同一个数据库索引中,随着业务的发展与订单量的累积,ES查询的速度已经越来越慢。通过Grafana监控数据,可以看到单个索引的数据量已达到1.5TB,主要的性能指标越来越差。ES的CPU使用率不时地大于80%,甚至100%,导致极端情况下ES查询耗时十几秒。对于用户的直观感受就是,在界面上面查询数据,需要耗时很久才能看到数据。

更多 →

February 20, 2021

用Python读取sitemap并调用百度接口推送URL

pythonseo

SEO对于网站的推广很重要,大多数搜索引擎都提供了一些API用于给站长主动提交URL,加快网页被收录的速度。 百度提供了快速收录的API接口,下面这个Python脚本可以用来读取本地磁盘中的sitemap.xml文件,并调用接口提交URL至百度。

更多 →

February 1, 2021

使用Python在两个Postgres数据库直接复制数据

postgrespythonpsycopg2

在python脚本中,通过 psycopg2 库的copy_expert,可以很方便地在两个Postgres数据库之间复制数据 s = StringIO() # Export into memory buffer sql = """ COPY (select * from foo) TO STDOUT WITH CSV HEADER ENCODING 'UTF8'; """ sourceCursor = sourceConn.cursor() sourceCursor.copy_expert(sql, s) # Import from memory buffer to destination database sql = """ …

更多 →

January 26, 2021

Postgres通过SQL语句复制表结构

postgres

在创建临时数据表的时候会有用 create table if not exists foo as (select * from bar) with no data;

更多 →

January 26, 2021

MyBatis查询中动态指定schema

mybatispostgresschema

由于业务的需要,在查询的时候,需要动态地在SQL语句中指定schema。在mybatis的的查询语句中,可以使用 ${schemaName}。注意,必须要用$, 而不是#

更多 →

January 25, 2021

Manjaro设置默认Java版本

manjaro

如果本机装了多个java版本,会有一个默认的java版本。随着java版本的不断升级,一些新的工具会要求高版本的java,否则无法运行。这个时候,就需要修改默认的java版本。

更多 →

January 20, 2021

Kubernetes in Action笔记 - (18) 高级调度:污点、容忍度和亲缘性

kubernetes

使用污点和容忍度阻止节点调度到特定节点 污点和容忍度 污点是在不修改已有pod信息的前提下,通过在节点上添加污点信息,来拒绝pod在某些节点上的部署。

更多 →

January 5, 2021

Kubernetes in Action笔记 - (17) 自动横向伸缩pod与集群节点

kubernetes

注意:Kubernetes的自动伸缩特性在1.6与1.7版本之间经历了一次重写, 因此网上关于此方面的内容有可能已经过时了。 pod的横向自动伸缩 自动伸缩步骤 横向pod自动伸缩是指由控制器管理的pod副本数量的自动伸缩。它由Horizontal控制器执行, 通过创建一个HorizontalpodAutoscaler(HPA)资源来启用和配置Horizontal控制器。该控制器周期性检查pod度量,计算满足HPA资源所配置的目标数值所需的副本数量, 进而调整目标资源(如Deployment、ReplicaSet、 ReplicationController、 StatefulSet等)的replicas字段。

更多 →

January 4, 2021

Kubernetes in Action笔记 - (16) 计算资源管理

kubernetes

为pod中的容器申请资源 创建一个pod时,可以指定容器对 CPU 和内存的资源请求量(即requests),以及资源限制量(即limits)。它是针对每个容器单独指定,pod对资源的请求量和限制量是所包含的所有容器的请求量和限制量之和。

更多 →

January 3, 2021

Kubernetes in Action笔记 - (15) 节点与网络安全

kubernetes

在pod中使用宿主节点的Linux命名空间 pod中的容器通常在分开的Linux命名空间中运行。 这些命名空间将容器中的进程与其他容器中,或者宿主机默认命名空间中的进程隔离开来。

更多 →

January 3, 2021

Kubernetes in Action笔记 - (14) API Server服务器的安全防护

kubernetes

如果攻击者获得了访问API服务器的权限, 他们可以通过在容器镜像中打包自己的代码并在pod中运行来做任何事 认证机制 API 服务器可以配置一个认证插件列表。列表中的每个插件都可以检查这个请求和尝试确定谁在发送这个请求。当通过认证后,返回用户名、用户 ID 和组信息给 API 服务器,API服务器就会停止调用剩余的认证插件井继续进入授权阶段。

更多 →

December 29, 2020

Kubernetes in Action笔记 - (13) Statefulset

kubernetes

了解Statefulset 与ReplicaSet比较 Statefulset 保证了pod在重新调度后保留它们的标识和状态。 与ReplicaSet类似, Statefulset 也是依据Statefulset 的pod模板创建的,也会指定期望的副本个数。

更多 →

December 29, 2020

Kubernetes in Action笔记 - (12) Deployment

kubernetes

Deployment是一种更高阶资源, 用于部署应用程序并以声明的方式升级应用。 在使用 Deployment 时, 实际的 pod是由 Deployment 的 Replicaset 创建和管理的, 而不是由 Deployment 直接创建和管理的。

更多 →

December 27, 2020

Kubernetes in Action笔记 - (11) 从应用访问pod元数据及其他资源

kubernetes

通过Downward API传递元数据 对于pod调度、运行前预设的数据,可以通过环境变量或者configMap和secret卷向应用传递配置数据。但是对于那些不能预先知道的数据, 比如pod的IP、 主机名或者是通过ReplicaSet等控制生成的pod名称,该如何获取呢?这种类型的数据,可以通过使用Kubernetes Downward API解决。

更多 →

December 26, 2020