Anúncio
Anúncio

Mais conteúdo relacionado

Apresentações para você(20)

Similar a Spring Boot + Doma + AngularJSで作るERP 〜JavaQneバージョン〜 #jqfk(20)

Anúncio

Último(20)

Anúncio

Spring Boot + Doma + AngularJSで作るERP 〜JavaQneバージョン〜 #jqfk

  1. Spring Boot + Doma + AngularJS で作るERP ∼ JavaQneバージョン ∼ JavaQne 2015 Fukuoka 2015/01/24
  2. 自己紹介 • 名前: 松崎 学 • Twitter: matsumana • blog: http://matsumana.info • 所属: 株式会社キャム http://cam-net.co.jp/ • 職業: ソフトウェアエンジニア
 (プログラマ、ITインフラエンジニア) • ITインフラ勉強会@福岡、MySQL Casual Fukuoka 主催
  3. JJUG CCC 2014 Fall で発表してきました! その時のスライドは これです http://goo.gl/CGWzRG
  4. 今日お話する事 • サービスの特徴と、それを支える技術の概要
 ・サービスの歴史 インフラ編
 ・サービスの歴史 フレームワーク編
 ・現在のアプリの開発環境 • Spring Boot, Doma, AngularJSを選んだ理由と
 実際に使ってみた感想
  5. まず始めに
  6. ERPとは何か? 企業全体を経営資源の有効活用の観点から 統合的に管理し、経営の効率化を図るための 手法・概念のこと。 ERPが一般的に扱うものは企業における 製造・物流・販売・調達・人事・財務会計である。 ERPパッケージはこれらの基幹業務に関する 業務活動の情報管理を支援する。 Wikipediaより http://ja.wikipedia.org/wiki/企業資源計画
  7. 基幹システムとは何か? 企業の情報システムのうち、業務内容と直接に関わる販売や 在庫管理、財務などを扱うもの。 あるいは、単に、業務やサービスの中核となる重要なシステム。 IT用語辞典 e-Wordsより http://e-words.jp/w/E59FBAE5B9B9E7B3BBE382B7E382B9E38386E383A0.html
  8. 例えばERPでカバーする サブシステムには 次のようなものがあります
  9. • 受発注 • 購買債務 • 販売債権 • 製造 • 在庫 • 原価 • 財務会計 • 管理会計
  10. • 人事 • 給与 • 勤怠 • などなど
  11. • サービス(SaaS)として提供
 マルチテナントなアプリ
 顧客のオンプレミス環境ではなく、
 弊社が構築・運用しているインフラ環境(AWS)
 でアプリを稼働させている • インフラ費用は全て弊社負担
 インフラ費用増 = 利益減
 少ないリソースでリクエストを捌く事が非常に重要 • OSやブラウザのバージョンアップ対応は無償 サービスの特徴
  12. サービスの歴史 インフラ編 • 2007∼ 国内データセンター • 2013∼ AWS
  13. インフラの 全体概要図
  14. http://goo.gl/cTexvM
  15. • サーバやミドルウェアは必ず障害が発生する前提で
 考えたインフラ構成とアーキテクチャ • 一部に障害が発生してもサービスが止まらないように
 各レイヤーは冗長構成にする • サービスが止まるような障害の場合でも
 出来るだけ早く復旧出来るようにする インフラ構成のポイント
  16. 使用しているソフトウェア • Webサーバ: Apache 2.2 • APサーバ: Seasar2 → Tomcat 6
 Java EE 6 → GlassFish 3.1.2.2
 Spring Boot → Tomcat 8 • DBサーバ: PostgreSQL 9.3 • 監視: Zabbix 2.0
 ・EC2インスタンスのリソース監視、可視化、
 アラート通知
 ・Java GatewayでJVMを監視、可視化、アラート通知
  17. Zabbix Java Gateway を使ってJMX経由で ヒープを可視化したら こんな感じ
  18. Jenkinsをどんな感じで 使っているかについては 別の資料があるので 抜粋してご紹介します http://www.slideshare.net/itokami1123/jenkins-java-spring20140609
  19. GitHUB Jenkins ソースのバージョン管理はGitを使用してます。 GitHub上のリポジトリにソースを集約してます。 PUSH ( ( ( プルリク・プルリク/
  20. GitHUB Jenkins GitHubからを5分毎にポーリングして マージしたソースをJenkinsに取得しています。 PULL ( ( ( Git plugin!/ * /5 * * * *
  21. GitHUB Jenkins Jenkinsの状態(ビルド開始など)をHipChatで通知します。 HipChatは他にもGitHubの状態などにも使ってます。 通知 ( ( ( Jenkins HipChat Plugin / コンパイルはじまった! /
  22. GitHUB Jenkins ビルドジョブを実行します。緊急でビルドだけしたい時も考え てテストジョブは分けてます。 ( ( ( ビルドなう! / maven mvn install -DskipTests=true ビルド ジョブ JSHintやCheckstyleで品質管理
  23. GitHUB Jenkins ビルドジョブ終了をキッカケにテストジョブを実行∼。 テストジョブ終了をキッカケにデプロイテストを実行∼。 ( ( ( ビルド ジョブ テスト ジョブ 上流から下流ジョブ / デプロ イテスト 状況を結果通知 /ちゃんと動いてる!
  24. GitHUB Jenkins ステージング環境やプロダクト環境に配備するJOBは手動で
 実行しています。(課題の切りのよいタイミングで行う為) ( ( ( ステー ジング ジョブ ステージング環境 結合試験! / 課題管理はJIRA使ってます。 手動で起動
  25. ログ収集はFluentd
  26. • AWS (EC2, S3, Route53, SES, RDS, VPC) • GitHub • レスポンスタイム可視化: New Relic • ログ分析: Google BigQuery • 通知: HipChat 使用しているサービス
  27. 次はアプリのお話
  28. サービスの歴史 フレームワーク編 • 2007∼ Seasar2 (Teeda + S2Dao)
 ※現在も稼働中 • 2012∼ Java EE 6 (JSF + JPA)
 ※現在も稼働中 • 2014∼ Spring Boot + Doma + AngularJS
  29. アーキテクチャを 選定する上で重要なポイント • ERPはミッションクリティカルかつ、ライフサイクルが長 い (世間では10年間とか使われる事もある)
 弊社では同じアプリを10年使い続けるのではなく
 定期的に作り直す事にしています (いわゆる式年遷宮)
 10年前の製品に現在どのくらい魅力があると思いますか? • 画面の操作性、入力効率、サクサク感を重視 • インフラのコストを抑える
 (少ないサーバリソースで多くのリクエストを捌く)
  30. サービスを長い間 開発・運用してると 色んな問題が 出てくるものです
  31. • IEの互換モードでしか動かないアプリ
 (2007年のサービスローンチ時点ではIEは7だったし
 Chromeも存在しなかった) • 時代遅れ感が出てきたUI
 (最近はリッチなWebサイトやスマホアプリが
 普及して顧客の目も肥えてきている)
  32. • APサーバやサードパーティコンポーネント (PrimeFaces)のバグに遭遇
 OSSなので自分で直すという選択肢はあるが、
 それに割くリソースを確保できなかった • APサーバのリソース消費が高い • アプリのもっさり感
  33. 2014年1月から 新アーキテクチャでの アプリ開発を開始
  34. いくつかのアーキテクチャ の候補を考え 試作アプリを作り 検討を重ねて採用したのが
  35. Spring Boot
 +
 Doma
 + AngularJS
  36. なぜSpring Boot? • 組み込みAPサーバでお手軽 • Tomcat/Jettyで必要十分だった。リソース消費も少ない • Spring Bootなら各種設定や依存ライブラリの指定も楽 • Springもバージョンアップ時の互換性を重視しているので
 長く使える事が期待できる
 (Groovy, Grailsみたいにならなければ・・・)
  37. なぜDoma? • JPAに馴染めなかった
 キャッシュ、N+1問題、エンティティ管理状態
 (JPAで扱いやすいテーブル設計になってない気もした) • SQLは自分で書く、SQLは外部ファイルに書く
 というS2Daoのスタイルに慣れているし、
 Domaはより便利になっている • 依存ライブラリが無いので導入しやすい
  38. なぜAngularJS? • AngularJSについては、この後@itoKami1123さんに
 話してもらうので割愛
  39. 現在のアプリの 開発環境 • 開発はLinux上でやってます • vagrant upしてリモートデスクトップでログイン
  40. • Windowsで開発し、本番がLinuxだと
 それに起因するバグを出してしまう事がある
 
 ・文字コード問題
 ・改行コード問題
 ・パス区切り文字問題
 ・レポートのレイアウト崩れ問題(JasperReports)
 など
  41. • 必要な開発ツールのごった煮感が半端なくて、
 セットアップが大変なので
 チームのメンバーにVirtualBoxとVagrantを
 インストールしてもらい、
 boxファイルとChefのcookbookを配布
 
 ※ホストOSとゲストOSでクリップボードの共有が
 おかしいので、ちょっと不便です・・・
  42. プロビジョニングしている ソフトウェア (1) • Java8 • Maven • Node.js • PostgreSQL 9.3 • Fluentd (td-agent)
  43. プロビジョニングしている ソフトウェア (2) • Chromium • Mozc • LibreOffice • oh-my-zsh • xrdp
  44. Spring Boot, Domaを 使ってみた感想
  45. Spring Boot / Spring • Seasar2とJava EE 6を使ってきたので、
 Springのコンテナ機能(DI, トランザクション, AOPなど) は理解しやすかった • テストライブラリが充実していて良い感じ • アプリの起動が早く快適に開発できる • サーバのリソース消費が少ない
  46. Doma • SQLでゴリゴリ書きたい派には、とてもオススメ • 依存ライブラリが無いのも、とてもいい感じ • 便利機能がいっぱい
 ・Java8対応
 ・コンパイル時チェック
 ・SQLファイル内の変数チェック
 ・SQLファイルの存在チェック
 ・ページング (Limit, Offset, 総レコード件数) 他にも沢山あります。詳しくはドキュメントを http://doma.readthedocs.org/ja/latest/
  47. モジュール構成 (概要) • マルチモジュール構成 • Javaのビルドルーツ: Maven • フロントエンドのタスクツール: Grunt
 maven-grunt-pluginを使ってMavenから起動される
 jshint, karma(Jasmine), concat, cssmin, uglifyを実行する
  48. Spring BootやDomaに 関するブログを いくつか書いてます
  49. • Spring BootでO/Rマッパーの比較 • Spring Bootのコネクションプーリングの比較 • Spring Bootのアプリケーションサーバの比較 • Spring BootでISUCON4予選のJava実装を作った • Spring Bootで現在捌いているリクエスト数を
 取得する • Spring + Domaで実装したアプリのユニットテスト http://matsumana.info/blog/categories/spring/
  50. 次のような場合は Java EE(JSF)を 選択した方が 良いのかも (個人的な意見です)
  51. • 閉じた環境で特定のユーザのみが使用するシステム • 保守サポートが必要な場合 • フロントフレームワークに絡んだ改修予算が
 確保できない場合
  52. ここまでのまとめ • 標準技術だから。流行っているから。ではなく
 きちんと検討・検証して自分達にあうものを
 選びましょう
  53. 次は @itoKami1123さんによる AngularJSの話です スライドはこちら http://www.slideshare.net/itokami1123/20140124-angular-js
Anúncio