Albert Chen

Albert Chen

[筆記 ] TGONext  架構組

[筆記 ] TGONext 架構組

何謂高併發? 第一次的讀書會首先由高併發作為討論主題的開頭,在正式開始討論這個主題之前,通常會定義什麼是高併發? 其實高併發這個詞相較於中國,因為先天使用者人口基數的差別,在台灣除了特定的產業或是使用情境(直播、雙十一搶購、搶票等),對比之下是比較不被廣泛討論的一個主題。 那什麼是高併發呢?通常指的就是服務同時間能撐起高請求量就叫做高併發,通常我們在評估一個服務能夠同時承受多少的請求量有幾個可供參考的數據指標: * QPS: Queries Per Second,意即每秒能回應的查詢次數,通常用來表示服務的吞吐能力。 * TPS: Transactions Per Secon,指 client 向 server 請求後得到最終結果的過程,與 QPS 不同的是 TPS 是對於一個頁面的請求,一個頁面請求可能包含著若干個對 server 的請求。 * PV: Page View,指頁面流覽量,單一使用者可以計入多個 PV 的計算中。 * UV: Unique Visitor,獨立訪問數,單一使用者只計入一個計數中,UV
13 min read
在 PHPUnit 中測試 protected 和 private 方法
php

在 PHPUnit 中測試 protected 和 private 方法

前言 就理論上沒有理由要針對已封裝的方法進行測試,對於那些 protected 和 private 方法一般會採取間接的測試方法。意即透過測試 public 方法來驗證裡面所呼叫的封裝方法是否符合預期邏輯,而對外部使用者來說,針對 public 方法的單元測試便會順便包含到這些封裝方法的測試,封裝方法本身就是 public 方法的一部分,他們也不需要去分辨哪些是封裝過的邏輯,因為只需要關注 public 方法即可。 封裝本身代表著:針對外部使用者本來就不需要了解,也根本不了解的成員或方法進行隱藏。單元測試本身就是模擬外部使用者的動作,那當然也只需要對測試目標 public 的方法進行模擬與驗證。 如果你發現測試 public 方法無法協助你測到所有想測試的封裝方法,大部分代表在設計本身上就有問題或是那些 protected 和 private 方法在現階段是沒有必要的,屬於 over design。 這其實也是 TDD 提倡的精神,如果全部的測試都符合預期,就代表功能完成了。而且按照測試來撰寫的程式,幾乎不會出現測試無法涵蓋的程式,因為程式本來就是為了滿足測試而撰寫的。
3 min read
Swoole - 基本概念
swoole

Swoole - 基本概念

Process 與 Thread Process(行程、進程、處理程序)與 Thread(執行緒、線程)是作業系統中相當重要的概念。因為他們相對比較抽象,且通常 PHP 開發者對於兩者的概念較薄弱,但是在 Swoole 開發中會運用大量 Process 與 Thread 的觀念,所以在開始學 Swoole 之前對於他們必須有基本的了解。 Process Process 是一個程式執行後實體化的概念,在分時系統年代中 Process 是程式運作的基本單位。一個程式可以產生多個 Process(一對多關係),若干 Process 有時可能與同一個程式相關聯,且每個 Process 皆可以同步(循序)或非同步(平行)的方式獨立執行。Process 需要一些資源才能完成工作,如:CPU、記憶體、
8 min read
在 Laravel  實現自動 Refresh JWT 機制
laravel

在 Laravel 實現自動 Refresh JWT 機制

簡介 JWT JSON Web Token (JWT) 是由 Auth0 於 2015 年所提構出的一個新 Token 機制,嚴格來說 JWT 並不是一個新的技術或軟體,而是一套規範(RFC-7519)。基本上 JWT 包含以下三種資訊: * Header {"alg":"HS256","typ":"JWT"} * Payload {"loggedInAs":"admin","iat":1422779638} * Signature key = 'secretkey' unsignedToken = encodeBase64Url(header) + '.' + encodeBase64Url(payload) signature = HMAC-SHA256(key, unsignedToken) 以上資訊最終會被以 . 的符號組成一段 JWT Token encodeBase64Url(
5 min read
透過 Swoole 加速 Laravel 效能
swoole

透過 Swoole 加速 Laravel 效能

Laravel 的速度瓶頸 雖然 Laravel 非常的強大與優美,但是對於 PHP 這種直譯式腳本語言來說,像 Laravel 這種複雜及龐大的框架會使得速度比起原生的 PHP 還要慢上許多,常見的優化方式有以下幾種: * 使用 Laravel 提供的指令來做快取優化 php artisan optimize php artisan config:cache php artisan route:cache php artisan optimize 在 Laravel 5.5 中已經列為 deprecated,無實際作用(不需要了)。 * 使用 Opcahce 加速 PHP 在每次執行時都會由 Zend 引擎先編譯成 OpCode。最後 Zend 虛擬機再執行
4 min read
Swoole 相關學習資源整理
swoole

Swoole 相關學習資源整理

有鑒於 Swoole 學習資源在網路上較為分散,所以特地整理關於 Swoole 的一些學習資源供參考。 官方資源 * 說明文件:https://wiki.swoole.com/ * API 文件:https://rawgit.com/tchiotludo/swoole-ide-helper/english/docs/index.html * 討論區:http://group.swoole.com/ * 英文文件:https://github.com/swoole/swoole-docs 官方的文件資源可能有部分內容並不是最新版本的說明 非官方資源 * Awesome Swoole: https://github.com/swooletw/awesome-swoole * Easy Swoole:https://linkeddestiny.gitbooks.io/easy-swoole/
1 min read
PHP 也有 Day #33 - Swoole: 重新定義 PHP
swoole

PHP 也有 Day #33 - Swoole: 重新定義 PHP

這次有幸受邀擔任九月份 PHP 也有 Day 的講者來分享關於 Swoole 的一些基本應用。在這裡分享演講簡報與範例 Repo。 議題大綱 1. Swoole 的入門介紹與基本應用 * Swoole 簡介 * 安裝與編譯 * HTTP Server * Websocket Server * Async IO * Memory Table * Coroutine 2. Swoole Server 模型架構解說 * Master * Reactor * Manager * Worker * Task Worker 3. 如何透過 Swoole 讓你的 PHP 效能飛高高 * Database Connection Pooling * Speed up your Laravel App with
1 min read
UniMD 開發紀錄 (一)

UniMD 開發紀錄 (一)

前言 由於 HackMD 提供了非常好用的線上 Markdown 共筆平台,但我們公司內部自己使用上還有其他想達到的需求,如:進階檔案共享權限、團隊的概念、檔案資料夾管理、筆記備註等功能,於是我們就決定仿效 HackMD 自己重新開發屬於自己的一套 UniMD。 開發技術 我們團隊熱愛 PHP 語言和擅長 Laravel 框架,所以和 HackMD 所採用的 NodeJS 不同,我們採用 PHP 為主要開發的技術,並且搭配 Swoole 做為我們的 WebSocket Server 及其他進階的異步應用。 關於 Websocket 在 NodeJS 中要使用 WebSocket 非常方便,前後端只需要同時使用 socket.io 這個 package 就能夠快速建立起一切你要開發 WebSocket
6 min read
PHP 的性能猛獸 - Swoole
swoole

PHP 的性能猛獸 - Swoole

前言 PHP 發展至今已經 20 餘年,現今許多網站有相當高的比例都是以 PHP 所建構而成,然而一直以來 PHP 為人所詬病的就是他的效能問題。尤其是現今許多的開發框架雖然強大優雅,但同時也因為框架的複雜度讓 PHP 的效能更加倍放大來檢視,甚至成為許多人不選擇使用框架開發的原因。 雖然在新版的 PHP 7 中比起以往效能上有重大的突破,但在大多數人眼中 PHP 似乎始終都不是以效能為考量時的主要首選開發語言。但是接下來要介紹的 Swoole 可能會讓你重新定義 PHP,甚至更加倍地愛上他。 PHP 面對大流量或高效能需求時,也有既有的許多解決方案,但不在本篇文章的主題內,故不細加說明。 Swoole 簡介 首先,Swoole 這個名字源自於作者起出的名字 sword-server,意即希望為廣大的 PHP 開發者創造出一把鋒利的劍,後來又參考 google 的字將sword-server做變形變成了 Swoole 這個名字。  Swoole 並不是一個新的程式語言,他是一個以純
6 min read
在Laravel/Lumen中快速整合Invisible reCPATCHA
laravel

在Laravel/Lumen中快速整合Invisible reCPATCHA

前言 在上一篇的文章中,我們提到了今年Google宣佈推出最新版的機器人識別技術-Invisible reCPATCHA,而在這片文章中將教你如何快速的在你的Laravel專案中應用這項技術。 前端驗證指南 根據Google官方的文件指南看來,其實Invisible reCPATCHA的背後驗證的技術與前一代的no captcha應該不會相差太多,使用與前一代的API相同的引入位置: https://www.google.com/recaptcha/api.js,但既然Invisible reCPATCHA是完全隱形的,那該如何觸發進行驗證動作的時機呢? 其實很簡單,API只需要和你的submit button的送出事件綁定在一起,API即可在你正式送出表單資料前與Google的驗證伺服器完成驗證,以下為Google官方文件所提供的前端範例: reCAPTCHA demo: Simple page