Tuesday, March 29, 2022

[libbpf] 為何要使用 libbpf? 什麼是libbpfgo?


在開始說清楚講明白什麼是libbpfgo之前,我們可以先看這一投影片介紹初學者使用Go開發eBPF程式指南: Beginner's Guide to eBPF programming with Go,此作者也提供 GitHub: https://github.com/lizrice/libbpfgo-beginners,可體驗一下用libbpfgo開發的小範例程式Basic eBPF examples in Golang using libbpfgo.


看過了簡單的小範例之後,接下來這篇文章主要是解釋什麼是vmlinux.h 以及為什麼在編寫 eBPF 程序時應該開始使用它: What is vmlinux.h and Why is It Important for Your eBPF Programs?

重點如下:

[Janus] 如何快速制定與使用Janus API Gateway


[前言]

當前端(Frontend) Web App 需要使用到多個API Servers時,最快的方式就是使用API Gateway 作為前端的進入點,透過URI Route的設定與對應後端的API & Server。

根據Janus's Github 上官方的描述, 它是一個輕量級的 API Gateway和 管理平台,可控制訪問 API 的人員、訪問時間以及訪問方式。Janus 還將記錄有關使用者如何與你的 API 交互以及何時出現問題的詳細分析。

官方文件: https://hellofresh.gitbooks.io/janus/content/

下面段落將說明如何快速制定與使用Janus API Gateway。

Wednesday, March 23, 2022

[GraphQL] 使用 Apollo Client + React 來建置 GraphQL 前端應用程式

[前言]

GraphQL系列文章

本篇內容將提供快速的指引,使用Golang Gin Framework來建置GraphQL的API  Server。


[Apollo Client Architecture]

Apollo Client 與 UI 框架無關 (可與 Angular.js、Vue.js、React 甚至原生 iOS 和 Android 應用程序一起使用)。

Tuesday, March 22, 2022

[GraphQL] 使用Golang Gin Framework來建置GraphQL的API Server

 [前言]

本篇內容將提供快速的指引,使用Golang Gin Framework來建置GraphQL的API  Server。


[使用Golang Gin Framework來建置GraphQL的API  Server]

GraphQL API Server主體上來說是參考下列文章的方式來建置:

第 1 天 - API 服務器(Go,GraphQL) - 第 1 部分

第 2 天 - API 服務器(Go,GraphQL) - 第 2 部分

Golang Gin Server網路上已經有很多資源,我們假設已經有的前提下,如何來建置GraphQL的API  Server。首先,先安裝所需的模組:

#在個人自己的Gin Server 的 project 內
$ go get github.com/99designs/gqlgen
$ go get github.com/gin-gonic/gin

我們需要準備下列檔案: 

Friday, March 18, 2022

[Golang] Go 1.16 中關於go get和go install的變動

 

[前言]

其實Go 1.16已經 Release 很久了,但最近發現關於 go get 的行為跟以前不一樣並且多了 go install 這個 tool,所以本篇記錄一下需要注意的地方。

[關於go get和go install的變動]

我目前Golang的版本如下:

Wednesday, March 16, 2022

[React] 從無到有建立全新的 React 應用程式

[前言]

本篇內容將提供快速的指引,包含相關需安裝的套件,從無到有建立全新的 React 應用程式( single-page application, SPA)


[安裝]

請先下載 node.js 打包檔於 https://nodejs.org/en/

本次範例是使用 node version v16.17.0 (.tar.gz file) 

安裝步驟如下:

[Tracee] Tracee 研究筆記 (一)

 [前言]

Tracee 是一個用 於 Linux 的執行時安全和取證工具。它使用 Linux eBPF 技術在執行時跟蹤系統和應用程式,並分析收集的事件以檢測可疑的行為模式。本篇對於Tracee這open source project進行了編譯與初步測試,在此做個筆記以防忘記。後續將針對源碼進行分析。

Github 位置為: https://github.com/aquasecurity/tracee


[Tracee相關文件資源]

網路上已經有不少的相關文件資源可以參考,在此不重覆贅述,如下所示:

eBPF 安全專案 Tracee 初探

深入浅出 eBPF 安全项目 Tracee

falco和tracee的实践

  • 裡面有提到 tracee 這種僅使用ebpf系統調用做入侵檢測的技術路線還不夠成熟~

Sunday, February 6, 2022

[Golang] Pointer Performance 指標傳遞性能

Pointer Performance 

我在O`REILLY出的一本書 "Go學習手冊"內有看到一個很有趣的段落: 指標傳遞性能 ( Pointer Performance )

我把這段的重點直接整理下來(因為很重要) 如下:

  • 無論資料的大小為何,將指標傳入函式的時間都是固定的,大約是1 nanosecond。
  • 如果struct夠大,將struct的指標當成輸入參數或是回傳值可以改善性能
  • 回傳指標 vs. 回傳值的行為比較有意思。如果資料結構小於1MB,回傳指標型別其實比回傳值更慢。例如: 100-byte的資料結構大約要花10 nanosecond 來回傳,但是那個資料結構的指標大約要花30 nanosecond。當資料結構超過1MB,性能優勢就會逆轉,回傳10MB的資料大約要花2 millisecond,但是回傳它的指標大約是0.5millisecond再多一些。