Inside Storage Systems - Transactions (3): Recovery

Recall what we discussed before about transaction properties, a transaction must be always consistent and durable. This is straightforward when everything is normal, while maintaining such properties despite of failures is nontrivial. A failure such as the system crash (e.g., due to the power outage) could leave a storage system in an inconsistent state. We need to treat failures as the norm and possess the capability of fault tolerance. One important solution is to recover transactions after crashes.

Read More

Algorithm Notes: Divide and Conquer

Divide and conquer is a strategy that helps simplify solving a complex problem. It begins by dividing a problem into subproblems. It then keeps doing that until the subproblem is trivial to solve. In the end the outcome of each subproblem are assembled backwards and eventually lead to the result of the whole problem.

Read More

Blogging with Hugo and GitLab (5): Let's Encrypt Renewal Automation

Manually renewing certificates every three months is not going to be sustainable. Fortunately, there is the experience shared for automating the certificate renewal under GitLab. The basic idea is to apply the same operation of the manual certificate generation described in the previous article, but via the automation strategy with the GitLab pipeline schedule. Here I recompiled the scripts from the original article to not include any domain specific content, which allows them to be directly applied to any repositories (with domain specific variables defined in the pipeline setting).

Read More