AHdark Blog

Coding is my profession, my dream, and my future.

Latest

程序中的素性测试

由于近期忙于公司事务和新系统的架构设计工作,博客的文章已经停更了数月。近几个月对我个人来说产生了很大的变化,我很难讲清其中的具体,但这大概会在后续的博客文章更新中体现。 但我认为,停更并非好事,而是应当避免的,因此我也在有片刻闲暇的今日在已经停止更新五个月的博客的第一篇文章。 序言 数学是科学的基础,而素数是数学的基石之一。尽管素数的概念简单直观——只有 1 和自身两个正因数的自然数——但它们在数学和计算科学领域却扮演着重要角色。 素数并非我们独立发现的,它们在自然界中以复杂的规律存在。通过对素数的理解和应用,我们得以解决各种问题,从密码学的加密算法,到搜索引擎的数据结构,甚至到量子计算的未来发展。因此,有效地检测一个数字是否为素数,对于编程来说是至关重要的技能。 在本篇博客文章中,我们将深入探讨素数校验在程序设计中的实现。我们将先从基础的数学理论开始,逐渐深入到各种算法的优化。同时探讨不同的素数检验算法,从最基础的试除法到更复杂高效的算法(如 Miller–Rabin primality test),来感受算法的历史与更迭。 素数的基础知识 在我们深入

By AHdark

使用 GitHub CI 自动推送镜像到 GAR

这篇博客将向您介绍如何使用 GitHub CI 自动将 Docker 镜像推送到 Google Artifact Registry(GAR)的自动构建仓库。 GitHub CI 的功能使得代码推送到 GitHub 仓库时,能够自动构建 Docker 镜像并推送到 GAR。这种自动化流程有助于提高了开发效率,同时还可确保在发布新版本时代码和镜像的一致性和可靠性。 本文将为您提供详细的步骤和指南,帮助您轻松实现自动构建和推送 Docker 镜像的流程。 相关服务介绍 在本章中,我们将简要介绍 Google Artifact Registry 和 IAM 的 Service Account 授权模式的概念和特点,以便读者更好地理解如何使用它们来构建和管理 Docker 镜像。我们还将介绍 Artifact Registry 和 IAM Service Account 之间的关联,并讨论如何创建和配置

By AHdark
Kubernetes 部署 WordPress 的方法

Kubernetes 部署 WordPress 的方法

主要使用工具的介绍 在本节中,我们将介绍 Kubernetes 和 Helm 的基本概念,这些知识是理解如何在 Kubernetes 集群上部署 WordPress 的基础。 Kubernetes 简介 Kubernetes 是一个开源的容器编排平台,用于自动化容器的部署、扩展和管理。Kubernetes 提供了一个统一的 API 和工具,使得容器的部署和管理变得更加简单和可靠。它可以管理运行在多台机器上的容器,确保容器应用程序的高可用性、弹性、伸缩性和安全性。 Kubernetes 主要包括以下核心概念: * Pod:Kubernetes 中最小的可部署单元,包含一个或多个紧密关联的容器。 * Deployment:用于管理 Pod 的副本数量和更新。 * Service:用于暴露 Pod 或 Deployment 在集群内部和外部的网络地址。 * Volume:用于将持久化数据挂载到容器中。 * Namespace:用于将 Kubernetes 资源进行逻辑上的隔离和分组。 Helm

By AHdark

浅谈 TypeScript 中的类型变化

TypeScript 是 JavaScript 的超集,其最显著特征是在 JavaScript 原有的语言模式上加入了类型强制,即静态类型系统。以此保证代码中变量处于类型安全状态,即只能赋同类型的值,而对象只能访问其自身所拥有的属性、方法。 类型安全 & 型变 类型安全是指同一段内存在不同的地方,会被强制要求使用相同的办法来解释,使开发者可以及早在编译时期就捕捉到潜藏的错误 let num: number = 1; let bool: boolean = num; // Error: Type 'number' is not assignable to type 'boolean'. 在上述情况中,number 类型与 boolean 类型是完全不同的,它们不构成继承关系,因此他们不能相互赋值。 那么,当我们需要将一个 `number` 存储的数字转换为

By AHdark

Nginx 动态反向代理实现

Source Global CDN 的海外中转链路往往需要对多个域名进行反向代理,之前的方案是给每个域名单独创建 vhost。但在链路增长、服务器增多的现实情况下,这一方案变得越来越难以维护。 我作为 Source Global CDN 的主要运维人员,自然而然地承担起了此任务。 问题 随着服务使用服务器增多,链路增长,我们面临以下问题: 1. 在配置出现更变时,需要为所有服务器进行内容修改,费时费力。 2. 如有服务新增,需要在所有服务器中进行多个操作,且需进行相关测试。 3. SSL 证书、vhost 的 conf 文件管理混乱。 在经过深思熟虑后,我们大致想出以下解决方案: 1. 使用泛域名解析,提高内聚性,使得所有服务器可以自动配合增删改的操作,无需单独配置。 2. 使用私有DNS服务,在一个平台管理链路,无需在服务器中进行修改。 高内聚的泛域名解析方案使得vhost文件数目和SSL数目大幅减小,私有DNS避免服务器内数据不修改的问题。 实施 泛域名解析 经过考虑,

By AHdark

为什么我使用 Golang 撰写容器化应用程序

在当前互联网架构圈子,容器化、微服务,是被主要讨论的话题。 显然,对于互联网的发展趋势来看,项目正在变得愈加庞大。单一的巨大的项目是不利于维护和开发的,开发者的电脑几乎难以直接承载阿里云、Azure这种巨大的项目,那我们就需要对其进行解耦。也就是说,应用的组件化、容器化、微服务化必将成为趋势。 在容器化应用程序开发这一点,我在之前的开发历程中有些许心得,在本文我将对其具体阐述。 先前的语言选用 在开始学习 Golang 之前,我曾尝试过很多语言。 就如我的个人简介所写的一样,较为经典的PHP、Java,较为复杂的CPP,较为有趣的Express.js、Koa.js、Next.js,我都曾使用过。即使是现在,你也可以在我的GitHub账号找到许多之前的练习品,如 AH-dark/bing-image-api。但这些语言或多或少都有一些不足之处,因而被我放弃。 Java Spring 全家桶在中国大陆被广泛地使用,特别是阿里巴巴,几乎可以算是 Spring 的最主要用户之一。 依靠阿里巴巴,SpringBoot

By AHdark

使用 Mailgun 用于邮件服务

在近期,我逐步将近乎所有的服务所使用的邮件服务都更换为 Mailgun,本文我将讲述我作出这一决定的原因和具体做法。 在确定使用 Mailgun 以前,我曾对SMTP邮件推送这一部分有过多种尝试。 曾用品 阿里/腾讯 企业邮箱(国内) 在我仍在职圆云的时候,我们依靠阿里云的企业邮箱进行企业事务处理。 企业邮箱同时兼具收发功能,具有较好的稳定性,但价格较高。对于个人服务来说,买五个账号起步,每年600元的企业邮箱,似乎毫无必要。 而腾讯企业邮箱等服务依赖企业微信,过于冗杂,对于个人来说过于麻烦,而且 Exchange 协议支持的不完善。 因此,我放弃这一想法。 阿里/腾讯 邮件推送 * 阿里云邮件推送:https://www.aliyun.com/product/directmail 我曾在圆云时期使用阿里云的邮件推送进行邮件通知。其好处在于,稳定性较高,且支持多域名多用户等情况。 但其只提供了邮件发送服务,完全不对邮件接收做支持,甚至不支持转发,因此在使用一段时间后我放弃了这一方案。 ahdark.com

By AHdark

Golang 使用 Wire 进行依赖注入

前言 在参与 Star Horizon 的一个项目时,我得到团队内同学的启发,发现了 Wire 这个神奇的东西。Wire 是 Google 研发并开源的一个 Golang 依赖注入解决方案,它通过解释原有文件生成新文件并用 Go Build Injector 实现编译环节的代码区分。 根据 Go Blog 所属,Wire 最先用于 Google 开源的 Go Cloud 项目中。 google/wire 应用 场景 我们通常会在构建 SDK 时在 Client 中嵌套 Services,在这种场景下 Client 依赖于 Services。 但常见的问题是:随着 Services 的增多,代码变得越来越冗杂,

By AHdark

记录一次自建短链接系统

4月9日,我注册了 ahd.im 域名并打算以此为基础搭建短链接系统。但当我在 GitHub 等平台搜索了一圈,却没有找到令我满意的作品。大多数UI丑陋或是算法效率低下,难以满足我的愿景,因此我决定着手写一套自己的短链接系统。 选择 这是我第一次独立完成一套全栈系统,其摸索的过程自然会为我全栈开发能力积累经验。因此,选择一套高效、高兼容、普适的技术栈自然是极为重要的一步。 后端 对于后端,最重要的是保证代码质量和执行效率。 PHP 效率太低,代码混乱,不被我欣赏。 ExpressJS 不适合写较大的系统应用,其并发也不强,且代码中同步异步容易混乱。 Golang 尽管性能较强,但不符合我的代码习惯。 C++ 应该就没有一个能用的Web开发框架。 最后,我选择了使用 Java Spring Boot 框架撰写后端功能,使用 MyBatis + MySQL 进行数据控制。 前端 前端便没有那么多选择了。 jQuery 我不是很熟悉,且当今时代高级前端框架林立,

By AHdark
如何有效地提高WordPress博客的访问速度

如何有效地提高WordPress博客的访问速度

引言 WordPress 作为建站市场占比40%的庞然大物,确实可以称得上是一个时代之作。也正是因此,不少个人站长和企业都选择使用 WordPress 构建自己的站点。在本篇文章中,我便要简要叙述一下如何利用有限的服务器和网络资源提高 WordPress 站点的访问速度。 关于 WordPress 本章节将阐述有关 WordPress 的相关知识。 什么是 WordPress WordPress 是一个以 PHP 和 MySQL 为平台的自由开源的博客软件和内容管理系统。WordPress具有插件架构和模板系统。截至2018年4月,排名前1000万的网站中超过30.6%使用WordPress。WordPress是最受欢迎的网站内容管理系统。全球有大约40%的网站(7亿5000个)都是使用WordPress架设网站的。WordPress是目前Internet上最流行的博客系统。WordPress在最著名的网络发布阶段中脱颖而出。如今,它被使用在超过7000万个站点上。 材料引用自 Wikipedia https://en.wikipedia.org

By AHdark