Location via proxy:   
[Report a bug]   [Manage cookies]                

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

Latest

Web 后端应用程序的可观测性改进

Web 后端应用程序的可观测性改进

相信日志,即 Logging,对于大多数开发人员是不陌生的。 日志是一种记录应用程序运行状态的重要手段,它可以帮助我们了解应用程序的运行情况,排查问题,甚至是监控应用程序的性能。在 Web 后端应用程序中,日志是不可或缺的一部分,它可以记录用户请求、应用程序的错误、警告等信息,帮助我们更好地了解应用程序的运行情况。 但它真的不可或缺吗?读完这篇文章后我想我给你的答案是:不是。日志的形式很单一,只是文本,这注定了它很冗杂的特点,我们很难从中提取我们需要的信息。即使你使用 AI 如 ChatGPT,也并不一定可以得到一个有建设性的答案。对于自己构建的应用程序,ChatGPT 既不了解也不可能去真的全部了解你的代码,这就带来了问题。 为什么日志不是不可或缺的 日志的形式单一,以纯文本呈现,信息常常显得冗余且难以提取。即便是使用 AI 进行分析,也不一定能提供清晰的洞见。日志的主要问题在于: * 冗余性和庞大的数据量:日志往往包含大量无用信息,查找特定问题的关键信息耗时。 * 缺乏上下文关联:单条日志难以呈现多个服务之间的调用关系和上下文,尤其是在微服务架构中

By AHdark
我如何从零开始学习一门编程语言

我如何从零开始学习一门编程语言

作为一门全栈开发,我理应掌握多门语言。截止 2024 年 9 月,我掌握了超过 30 门编程语言,可以使用它们构建简单的应用程序、为开源社区提交代码、为公司开发产品。我们不讨论对于“掌握”的定义,让我梳理思路,详细阐述我是怎么一步步掌握如 此多的编程语言的。如果你也想学习一门新的编程语言,希望这篇文章能够帮助到你。

By AHdark

通过控制反转降低代码耦合

或许你在学习 Spring 的时候曾听过,Spring 提供的容器叫做 IoC 容器。 IoC 是 Inversion of Control 的缩写,中文翻译为控制反转。控制反转是一种设计原则,早在 2004 年 Martin Fowler 便提出依赖反转,即依赖对象的获得被反转了。 非控制反转的问题 大多数应用程序都是由两个或是更多的类或组件通过彼此的合作来实现业务逻辑,这使得每个对象都需要获取与其合作的对象(也就是它所依赖的对象)的引用。 如果这个获取过程要靠自身实现,那么这将导致代码高度耦合并且难以维护和调试。 直接实例化与紧耦合 比如 A 组件需要调用 B,一般情况下你可能会在 A 的 constructor 或 init 块中显式建立 B 组件然后调用。 class A { private val b = new B(

By AHdark

程序中的素性测试

由于近期忙于公司事务和新系统的架构设计工作,博客的文章已经停更了数月。近几个月对我个人来说产生了很大的变化,我很难讲清其中的具体,但这大概会在后续的博客文章更新中体现。 但我认为,停更并非好事,而是应当避免的,因此我也在有片刻闲暇的今日在已经停止更新五个月的博客的第一篇文章。 序言 数学是科学的基础,而素数是数学的基石之一。尽管素数的概念简单直观——只有 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