Percona 宣佈支援 MyRocks (MySQL 上的 RocksDB engine)

RocksDBFacebookGoogle 放出的 LevelDB 改出來,然後被更多人接受並且投注資源的 library... (看兩邊的 GitHub 應該就會有感覺了)

而 Facebook 的人在改進後又花了不少力氣 porting 到 MySQL 上...

之前 Twitter 上就有看到不少消息,這次算是在 Percona 官方的 blog 上正式公佈要支援 MyRocks 的消息:「Announcing MyRocks in Percona Server for MySQL」。

依照目前的計畫次在明年 2017 的 Q1 放出 experimental build,依照 Percona 的品質慣例,應該是可以拿來在測試環境下跑的順順的 (在還沒有 heavy loading 的前提下):

We will provide the experimental builds of MyRocks in Percona Server in Q1 2017, and we encourage you to start testing and experimenting so we can quickly release a solid GA version.

文章下面的 comment 剛好有人提到 Percona 另外一個產品線 TokuDB,這兩個產品線重複的問題:

MyRocks seems pretty similar to TokuDB. They are both write-optimized. MyRocks uses LSM tree while TokuDB uses fractal tree.

How do the 2 compare? Which one would you recommend using?

之前被 Percona 買下的 TokuDB 跟 Facebook 所發展出來的 MyRocks 的產品重複性頗高 (都是為了寫入的部分最佳化)。應該還是因為 fractal treeLSM tree 成熟度造成的效能差異還是太明顯吧 (當然另外也跟後面公司投入的資源有關),讓 Percona 決定還是要支援 MyRocks,而不是全力推動自家買下的 TokuDB... (唔,變成阿斗了?)

不知道成熟後有沒有機會變成 InnoDB replacement...

WiGLE (Wireless Geographic Logging Engine)

WiGLE 是個蒐集無線網路資訊的服務 (i.e. SSID、mac address 以及定位位置),依照維基百科上的資料,WiGLE 計畫從 2001 年開始,到現在快十五年了:

The first recorded hotspot on WiGLE was uploaded in September 2001.

趁著最近 Pokémon Go 會跑來跑去,就順便幫忙蒐集資料了...

目前我蒐集資料的方式是透過 WiGLE 的 Android 應用程式 (Wigle Wifi Wardriving) 開著讓他背景跑,然後回到家以後上傳,過一陣子讓系統更新後就可以看到了。

WordPress.com 的 Elasticsearch

在「State of WordPress.com Elasticsearch Systems 2016」這邊描述他們 Elasticsearch 的架構。

有五個 cluster 打散,有跑 1.3.x 也有 1.7.x。把一般使用者與 VIP 分開,而全站的資料又是一組。另外在 2.3.x 的測試機上跑 en.support.wordpress.com 的資料 (看起來是短時間炸掉沒關係?XD)。

由於是自己生機器出來,所以機器的選擇上用大量的記憶體與 SSD 硬碟來換各種效能:

Typical data server config:
* 96GB RAM with 31GB for ES heap. Remaining gets used for file system caching
* 1-3 TB of SSD per server. In our testing SSDs are very worthwhile.

另外上面還是有疊 cache:

memcache timeouts vary from 30 seconds to 36 hours depending on use case

Docker 在 Mac 與 Windows 上使用 xhyve 與 Hyper-V

DockerMac OS XWindows 上開始支援其他的 VM Host 了:「Docker for Mac and Windows Beta: the simplest way to use Docker on your laptop」。

之前在 Mac OS X 與 Windows 上必須使用 VirtualBox 跑一個 Linux Host 起來,而現在可以用 xhyveHyper-V,另外剛剛發現 Linux 的部份也換到 Alpine Linux 上了 (不知道是不是這次才換的):

Faster and more reliable: no more VirtualBox! The Docker engine is running in an Alpine Linux distribution on top of an xhyve Virtual Machine on Mac OS X or on a Hyper-V VM on Windows, and that VM is managed by the Docker application. You don’t need docker-machine to run Docker for Mac and Windows.

透過搜尋引擎找 Hostname

看到「Fast subdomains enumeration tool for penetration testers」這個專案,可以透過多家搜索引擎找 hostname 出來做滲透測試。

支援五個大的搜尋引擎,以及 NetcraftDNSdumpster

Sublist3r currently supports the following search engines: Google, Yahoo, Bing, Baidu, and Ask. More search engines may be added in the future. Sublist3r also gathers subdomains using Netcraft and DNSdumpster.

不過沒有把 Yandex 放進去...

MySQL 5.7 的 Rewrite Query Plugin

在「What to do with optimizer hints after an upgrade?」這邊介紹了 MySQL 5.7 引入的 Rewrite Query Plugin,看起來有很多可以拿來變化的?

作者提到的用法是當 minor version 升級後 (譬如 5.6 升到 5.7),由於 optimizer 愈來愈聰明,hint 應該都要重新確認是否還需要指定 (像是 USING INDEX),避免效能反而變差。

但這個前提是你能夠改到程式碼,如果你改不到程式碼就只能祈禱效能不會變差。

而 MySQL 5.7 提供的 Rewrite Query Plugin 則可以改寫 SQL query,像是 Oracle 官方文件裡給的範例:

mysql> SELECT * FROM query_rewrite.rewrite_rules\G
*************************** 1. row ***************************
                id: 1
           pattern: SELECT ?
  pattern_database: NULL
       replacement: SELECT ? + 1
           enabled: YES
           message: NULL
    pattern_digest: 46b876e64cd5c41009d91c754921f1d4
normalized_pattern: select ?

就會把 SELECT 1 變成 SELECT 1 + 1。實際測試會發現檢查的很嚴格,用 PI() 不會變:

mysql> SELECT PI();
+----------+
| PI()     |
+----------+
| 3.141593 |
+----------+
1 row in set (0.01 sec)

mysql> SELECT 10;
+--------+
| 10 + 1 |
+--------+
|     11 |
+--------+
1 row in set, 1 warning (0.00 sec)

目前好像只想的到 hint 可以這樣做,反正還一堆都跑 5.6 (這兩天 Percona 才出 5.7 的 GA),可以邊規劃升級,邊想看看有什麼情境可以用的...

Google Compute Engine 推出 Custom Machine Type

Google Compute Engine 推出了可以自己設定 CPU 與 RAM 的機器種類:「Custom Machine Types - Compute Engine — Google Cloud Platform」。

可以從 1 個 vCPU 到 32 個 vCPU,而記憶體最多是 6.5GB * vCPU 數,所以理論上最高是 208GB?

Create a machine type with as little as 1 vCPU and up to 32 vCPUs, or any even number of vCPUs in between. Memory can be configured up to 6.5 GB of RAM per vCPU.

計價方式就是 vCPU 算一份,記憶體算一份。記得以前有比較小的 Cloud Service 有提供過類似的計價方式,後來都收掉了...

Zite 消失後的方案:Nuzzel

在去年十二月七日 Zite 被幹掉後,本來是流竄到 Prismatic 上,結果十二月二十日也關掉了... 之後就找不到能用的推薦引擎了。

用推薦引擎的目的是希望看到更多不同種類的內容:用 Feedly 看 RSS feed,而用 Twitter 追蹤短則的想法,或是用 Facebook 看同溫層的想法。但這些都是「已知」的來源所提供的資訊,沒有辦法發覺其他的文章。

其中一個變通的方法是找像 Hacker News Daily 這樣的 RSS feed 來讀,作者用程式每天算出 Hacker News 上的十大熱門文摘出來,對一般人應該也夠用,但我還是想要找到更多資訊。

Zite 與 Prismatic 是以 Recommendation System 來計算並且推薦,是個還不錯的方法。不過這兩個 app 都已經不在了...

Nuzzel 走了另外一個方向,你可以用 Twitter 與 Facebook 帳號連結,然後提供「朋友」以及「朋友的朋友」發表了什麼連結,依照時間或是數量排序出來:

相較於推薦系統,這樣的演算法雖然簡單很多,但解決了想要看更多資訊的問題。

不過還是覺得有些 app 上的操作怪怪的,但也沒辦法 (?),先用用看吧...

MySQL 上 InnoDB 與 RocksDB 的差異

Mark Callaghan 在「MyRocks vs InnoDB with Linkbench over 7 days」這邊分析了 MySQL 上的兩個 engine 的差異,總結是大獲全勝:

  • InnoDB writes between 8X and 14X more data to SSD per transaction than RocksDB
  • RocksDB sustains about 1.5X more QPS
  • Compressed/uncompressed InnoDB uses 2X/3X more SSD space than RocksDB

但 InnoDB 的 engine 是 2000 年的設計 (16 年前),MyRocks 的 engine (RocksDB) 則是 2013 年的設計,不屬於同一個世代。

相較於與 InnoDB 對打,我更想看到的是與 TokuDB (2012 年的設計) 對打的結果。

兩個新的 engine 都有針對 SSD 的特性發展,可以看出資料結構與寫入的方式就很不一樣,而且一開始就是在多 CPU 多核環境下開發,相較於 InnoDB 是一路改的包袱來的輕鬆許多。

Google 宣佈再更進一步加強對 HTTPS 頁面的支援

Google 在「Indexing HTTPS pages by default」這邊宣佈了對 HTTPS 更進一步的支援。

只要是 HTTPS 與 HTTP 內容相同,而且沒有被阻擋 (透過 /robots.txt 之類的),就會優先索引 HTTPS 版本的頁面。

另外也發現 blogspot.com 支援 HTTPS 了...