Try   HackMD

LaravelConf2017 筆記

Lumen也是個好東西

大會共筆

連結
https://laravelconf.tw/zh-TW/schedule

從快速成長的新創企業發展角度談 iFit x ECFIT 導入開發框架 Laravel 時的思維與歷程

  • 故事與過程
  • 為何要引入框架
  • 引入過程
    • 循序漸進、由簡入繁、有目的性地進行-可長可久的專案
    • 現有服務的網站或系統優先導入
    • 公司內部優先導入
    • 開發時程不緊迫的優先導入
    • 需要協同作業的優先導入
    • 小型短期不導入
    • MVP 專案不導入
  • 案例
  • 自行開發框架

Storage X GCS

  • 開始使用
  • 管理靜態檔案的統一介面
use Illuminate\Support\Facades\Storage; Storage::method(); Storage::disk()->method()
  • 也可以利用 Resolver
  • GCS
  • 套件
    • 跨平台配置
    • 設定load balance(設定圖片的domain)
  • Load Balance:負載平衡服務,是一種技術 通常是由專用軟體和硬體來完成。
  • 搭配domain儲存cloudfare設定快取,減少圖片載入的速度
    • (Cloudflare 教學) [https://sofree.cc/cloudflare-free-cdn/]
    • CDN:全名是「內容傳遞網路」(Content delivery network或Content distribution network),簡單說就是CDN伺服器會分散於全球各地,而這些伺服器會去抓取你網站的內容快取,而如果你人在美國,讀取了有掛CDN的網站,它就會就近讀取美國節點的網站,儘管網站在台灣,你也會感覺瀏覽速度不差。透過分散式的節點,可以分散網站的資源使用,如果你存取的美國節點失效,它會在就近找一個新的節點存取資料,讓資料不間斷。

Eloquent 資料庫層核心解構,讓 Laravel 支援更多資料庫

  • config/database.php

  • builder

  • databaseserviceprovider

    • databasemanager
    • connectionfactory->connection->connector->pdo
  • build a building

    • blueprint
    • builder
    • grammar
    • worker
  • how to create own driver

    • pdo support?
    • datatype
    • grammar
    • start from unit test

水平擴展PHP應用程序 - 使用 Maghead 資料庫框架

  • ORM
  • Maghead
    • maghead database framework
  • Laravel * Maghead
    • laravel container
    • service provider
      • boot()
      • register()
    • maghead
  • composer require maghead/laravel-bridge

SPA前後端分離

簡報
後端負責API部分;前端可自由選擇Js framework

  • 後端工程師:test case 能通過!
  • 前端工程師:撈出資料處理界面
    (可搭配優美架構設計服用)

何謂 SPA

Single Page Application單頁式應用程式,只在一個頁面中完成動作

優點 缺點
頁面能更快的被呈現 SEO問題
降低資料傳輸(ajax) 舊型瀏覽器不支援
UX大幅提升
APP、WEB不用重複開發

為何需要 SPA

  1. 前端不需要了解後端的資料夾結構跟程式碼,並可以互相選擇適合自己的框架,只需要透過API、JSON文件來溝通
  2. 清楚分工,例如:資料出問題找後端工程師,設定及畫面有問題找前端工程師

重要

  1. 開發API一定要做TDD開發
  2. API認證及授權(JWT、Passport)

JWT & Dingo (授權保護不要不合法的打進來)

Vue

  • axios(ajax協定)
  • vuex(狀態管理模式-集中式儲存組建狀態)

前端整合踩雷

  • 同源政策(Same-origin policy)
    解決:cors
  • 頻率限制
  • SEO
    解決:Prerender service、Server side render(Nuxt.js)

API設計文件


Laravel 事件及序列功能應用

影片
文件
1.序列 queue

  • driver
    • database
    • amazon sqs
    • redis
  • 優點
    • 延時處理
    • 運算分離
      • nginx>php-fpm>php-cli
    • 降低耦合
      • php artisan make:job PublicPost
    • 可靠性
dispatch((new Job)->onConnection('highCPU')); dispatch((new Job)->onQueue('high')); php artisan queue:word highCPU --queue=high

2.event
- php artisan event:generate
- model 裡面可以直接設定在何種事件處理
3.shouldqueue
https://divinglaravel.com/queue-system

實戰 TDD - 訂單系統

開發流程

紅燈->綠燈->黃燈反覆循環

簡介

Test、Driven、Development
TDD 真正的涵義
30天快速上手TDD

Laravel 的大流量策略(類似理論與概念)

面對大流量遇到問題不只是技術

  • 升級AWS的設備(高費用)

新創公司如何遇到大流量

如何以現有的資源大流量(1.5億個request)

  • 採用 CloudFlare 用檔案快取(全站快取)
    優點:server費用僅 1200 元
    缺點:不能用會員、即時更新文章內容

轉換框架歷程

所有框架或是程式語言都有跟效能有關係

  • WordPress:很難去自訂的編輯,有時更新會讓server掛掉
  • Ruby on Rails:當初有三個人來幫忙,周遭學習資源很少,很難去第一時間解決問題
  • Laravel:框架所擁有的社群很重要,還有自身的人脈

硬體

Laravel、CloudFlare Business、AWS

  • Photon 的圖床 (交流趴後來有補充 後來他們換成用imgix)
  • CloudFlare CDN
  • 使用 CDN 省下很多靜態圖檔的花費時間

想法

  1. 省下的錢足以在hire業務
  2. 善用你的影響力幫公司前進
  3. 自己的工作自己定義
  4. 讓團隊因你存在而感到美好

敏捷開發的最後一哩路

https://drive.google.com/file/d/0ByD9RXfQ70_6cUdueHcxMXFTOHc/view

  • 整合CI server
  • 寫測試與文件
  • 寫健置與打包腳本
  • 寫部屬與驗證繳本
  • 打造接近線上環境的開發環境

運用 Docker 整合 Laravel 提升團隊開發效率

Docker 基礎介紹與實戰

LaraDock

ElasticSearch:機器學習相關

  • Docker 七大指令
    • docker-compose -p $(project) up -d
    • docker-compose -p $(project) stop -d
    • docker-compose -p $(project) ps
    • docker-compose -p $(project) down
    • docker exec $(container) php artisan migrate
    • docker-compose -p $(project) build no-cache $(container)
    • docker-compose exec $(container) /bin/bash

自動化部署 CI/CD

CI/CD

  • 現今許多軟體公司皆以敏捷式或其變形之開發方法為圭臬,其優點為:在比較小且快速的循環中,持續驗證系統開發結果,小部分小部分地儘早確認,期望開發產出能符合原始需求,或依據產出進行快速修正。

    • CI (Continuous Integration)

      • 持續性整合,目的為針對軟體系統每個變動,能持續且自動地進行驗證。此驗證可能包含了:建置 (build)、測試 (test)、程式碼分析 (source code analysis)、其他相關工作
    • CD (Continuous Delivery & Continuous Deployment)

      • 持續性發布及部署,透過此流程可以確保軟體品質,不會因為一個錯誤變動而產生錯誤結果或崩潰(Crash)。此流程中的各類工具,也會產生一些回饋給開發者或其他角色,包含網頁/報表等等,用來追蹤並改善軟體潛藏的問題。
使用上
  • 捨棄
    Jenkins:設定太複雜
    Gitlab:綁太死無法帶走
  • 使用
    Drone 套件
    Drone基於container使用
補充

https://www.ccc.tc/article/3

講者GitHub
講者blog

Laravel優美架構 - 談可維護性與彈性設計

簡報
架構圖

一個專案很多人維護就要一個規範

  • Repository:資料庫邏輯
    關聯查詢
$this->user->posts()->all();
  • Services:商業邏輯跟流程
    將 controller 的條件判斷放在 Service 來與資料庫操作

  • Presenter:外觀顯示
    性別 0,1 回傳男生或女生
    使用 accessor、mutators 會讓 Model
    解法:Presenter

前後端分離

  • 不同頁面只需要特定欄位
    使用 Transformer

  • Formatter:制定格式

  • Foundation :獨立掛載

大大

Laravel-Oh-Generators

KKBOX 的團隊協作方式

多人協作

  • 那些人? 多少人
  • 怎麼互動?多少互動?
  • 做甚麼事?誰做多少事?

個人的效率不等同於團隊的效率

目標

  • Event Driven
    • 非同步/沒人喜歡被打斷
  • 減少溝通成本
    • 技術手冊、業務知識等
  • 減少人力支出
    • 盡量自動化
  • 避免 single point of failure
    • 避免有人出狀況就會影響全局

工具

  • Issue Tracker:Trac
    • 其他:jira/redmine/bugzlilla
    • 把在做/想做/該做的事情都可以放上去
    • 業務事項與決策的整合紀錄
  • Github/Gitlab host 大部分的code
    • Gitlab CI
      • 自動化Unit test
      • 自動部屬
      • 進主幹前 發MR 做Review
  • Git flow
  • Slack
  • trello

外部標準

  • 取得最大公約數
    • Coding Style (psr1,2/K&R)
    • 最多人用的Framework

工作流程

  • trac 開票
  • 工程師領票
  • feature branch 改code
  • 開MR peer review/ci
  • acceptance/部屬

好處

  • 工程師可決定何時被打斷
  • 容易掌握部門狀況
    • slack git log trac 不用寫工作日誌
  • 自動測試讓大家比較敢改code
  • 容易考古,決策過程不會被遺忘

壞處

  • event 能攜帶的payload 有限
    • 單一大主題仍須開會面對面溝通
  • 每個人必須積極主動
  • 討人厭/不熟的工作會被冷落
  • 資訊爆炸的隱憂
  • 非工程師討厭非同步溝通
    • 可設立單一窗口與非工程師溝通
  • Legacy code 測試跟review 都很痛苦

QA

  • Code Review
    • 盡量都要
    • 盡量分出一個小feature 功能 而不要大功能,大功能建議直接開一個develop branch
  • 新人訓練

交流趴

設計模式
piepe: 裝飾者模式
Laravel Dusk

額外補充

Devops
一種重視「軟體開發人員(Dev)」和「IT運維技術人員(Ops)」之間溝通合作的文化、運動或慣例。透過自動化「軟體交付」和「架構變更」的流程,來使得構建、測試、發布軟體能夠更加地快捷、頻繁和可靠。

開發團隊與運營團隊之間更具協作性、更高效的關係」。由於團隊間協作關係的改善,整個組織的效率因此得到提升,伴隨頻繁變化而來的生產環境的風險也能得到降低。
http://www.ithome.com.tw/news/96861
https://zh.wikipedia.org/wiki/DevOps

tags: laravelconf